2014-10-09 9 views
0

블루투스 저에너지 디바이스의 UI에서 "신호 강도 막대"로 블루투스 연결 강도를 표시하고 싶습니다. 이를 위해 BluetoothGattCallback.onReadRemoteRssi의 RSSI 값을 사용해야합니다. 그러나이 방법은 RSSI를 바 스케일이 아닌 데시벨로 반환합니다. 이 값을 막대 눈금 또는 비율로 안정적으로 변환 할 수있는 방법이 필요합니다.블루투스 RSSI의 WifiManager.calculateSignalLevel과 같습니다.

답변을 위해 Android 문서를 검색하는 동안 나는 WifiManager.calculateSignalLevel(int rssi, int numLevels)을 우연히 발견했습니다. 이 방법을 사용하여 Bluetooth 신호 강도를 해석 할 수 있습니까? 그렇지 않다면 어떻게해야합니까? 데시벨 RSSI와

+0

그 동안 해결책을 찾았습니까? –

+0

불행히도 아직 안 ... –

답변

0

(음수), 사용 :

int bars = WifiManager.calculateSignalLevel(rssi, 5); 

은 일반적인 범위에서 막대를 얻을 수는 0 - 4

(GrepCode에서) WiFiManager의 코드는 다음과 같습니다

private static final int MIN_RSSI = -100; 
private static final int MAX_RSSI = -55; 
public static int calculateSignalLevel(int rssi, int numLevels) { 
     if (rssi <= MIN_RSSI) { 
      return 0; 
     } else if (rssi >= MAX_RSSI) { 
      return numLevels - 1; 
     } else { 
      float inputRange = (MAX_RSSI - MIN_RSSI); 
      float outputRange = (numLevels - 1); 
      return (int)((float)(rssi - MIN_RSSI) * outputRange/inputRange); 
     } 
    } 
} 

나는 내 Galaxy S4 및 Note 10.1에서 반환 된 레벨이이 코드에서 제공되지 않음을 확인했습니다. MAX_RSSI = -63 코드와 비슷하지만 그다지 유사하지 않습니다. 어떤 코드가 실제로이 삼성 기기에서 사용되고 있는지 찾는 방법을 모르겠습니다.

결과가 신호 레벨에 대해 전화기가 표시하는 것과 동일한 것으로 보입니다. 그러나 블루투스가 아닌 Wifi 신호 레벨 용으로 사용하고 있습니다. 블루투스로이 방법을 사용한 경험이 없습니다.

+0

생산 규모가 합리적이라고 테스트 했습니까? –

+0

답변을 편집하여 자세한 정보를 포함 시켰습니다. 필자의 경험은 Wi-Fi에 관한 것이지만 WifiManager의 공용 버전이 생산하지는 않지만 현재 연결된 네트워크의 전화와 동일한 결과를 제공합니다. 결과는 합리적인 IMHO 인 것 같습니다. –