2012-04-16 3 views
1

블루투스 장치에서 정보를받는 Android 앱을 작성 중입니다. 우리 고객은 특정 조건에 따라 Bluetooth 장치가 이름을 바꿀 것을 제안했습니다. 가장 간단한 예를 들면 이름이 "xxx-ON"이고 경우에 따라 "xxx-OFF"입니다. 내 앱은이 BT 송신기 (BluetoothAdapter.startDiscovery()를 사용)를 찾고 그 이름에 따라 다른 작업을 수행하기로되어 있습니다. 나는 블루투스 장치와 페어링하지 않을 것이다 (가능하다면, 아마 여러 안드로이드 장치와 여러 BT 송신기로 작동하기로되어 있으므로 좋은 생각이 될 것이라고 확신 할 수 없다).이름 캐싱을 방지하고 검색시 블루투스 이름 변경을 감지하는 방법

내 코드는 BT 장치를 감지하고 이름을 찾는 데 잘 작동합니다. 또한 장치가 꺼지면 다음에 찾는 시간을 감지 할 수 있습니다. 그러나 그것이 거기에 있고 이름이 바뀌면, 나는 옛 이름을 집어 든다. 어딘가에 캐시되어있는 것으로 보인다. 블루투스 장치가 꺼지더라도 다음 번에 감지 할 때 이전 이름이 계속 표시됩니다.

이 문제는 Google 코드 : here에서 발견되었지만 주어진 해결 방법 ("연결 시도")을 사용하는 방법조차도 분명하지 않았습니다. 아무도이 일을 행운이 있었나요? 코드를 공유 할 수 있습니까?

캐시 된 이름을 삭제하고 다시 검색하는 간단한 방법이 있습니까? 항상 최신 이름을 찾습니다. 비 단순한 방법조차도 좋을 것입니다 (저는 뿌리를 내린 장치를 위해 글을 쓰고 있습니다).

감사

답변

1

내가 제안 'fetchUuidsWithSdp을()'. 중요한 것은 동일한 getUuids() 메소드와 달리 fetchUuidsWithSdp는 디바이스가 원격 디바이스에 대한 캐시 된 정보를 업데이트하도록합니다. 그리고 저는 이것이 SPD뿐만 아니라 원격 이름도 포함한다고 생각합니다.

제가 말씀 드린 방법 모두 코드가 리터의 이케이 보일 것이다, 그래서 전 4.0.3에 숨겨져있는 것을 참고 :

public static void startServiceDiscovery(BluetoothDevice device) { 
    // Need to use reflection prior to API 15 
    Class cl = null; 
    try { 
     cl = Class.forName("android.bluetooth.BluetoothDevice"); 
    } catch(ClassNotFoundException exc) { 
     Log.e(CTAG, "android.bluetooth.BluetoothDevice not found."); 
    } 
    if (null != cl) { 
     Class[] param = {}; 
     Method method = null; 
     try { 
      method = cl.getMethod("fetchUuidsWithSdp", param); 
     } catch(NoSuchMethodException exc) { 
      Log.e(CTAG, "fetchUuidsWithSdp not found."); 
     } 
     if (null != method) { 
      Object[] args = {}; 
      try { 
       method.invoke(device, args); 
      } catch (Exception exc) { 
       Log.e(CTAG, "Failed to invoke fetchUuidsWithSdp method."); 
      }    
     } 
    } 
} 

그런 다음 BluetoothDevice.ACTION_NAME_CHANGED 의도를 수신해야합니다, 그리고 그것에서 BluetoothDevice.EXTRA_NAME을 추출하십시오.

도움이되는지 알려주세요.

+0

고마워요. 분명히 내가가는 길입니다. BT 송신기 이름이 바뀌 었습니다. BT 장치가 꺼져 있으면 실제로 데리러 와야 할 것 같습니다. 그것이 없어지면 나는들을 수있는 다른 행동이 있는가? (방송이 아닌). 문구 작성을 도와 주시면 다른 질문으로 기꺼이 답변 드리겠습니다. – Kibi

+0

"내가 방송을 보지 못하면 듣기 위해 할 수있는 다른 행동이 있습니까 (방송이 아님)." 연결되어있는 경우 ACTION_ACL_DISCONNECTED를 사용하여 사라지는 시점을 확인할 수 있지만 그렇지 않으면 fetchUuidsWithSdp와 같은 새 연결을 만들거나 다른 검색을 시도해야합니다. 발견은 매우 비싼 작업이기 때문에 가능한 한 작게 수행해야합니다. – Tom

관련 문제