Android RSSI значение Bluetooth возвращает -32768 всегда? - PullRequest
3 голосов
/ 24 августа 2011

Я пытаюсь получить текущее значение RSSI подключенного устройства Bluetooth одним нажатием кнопки.Однако он всегда возвращает только -32768!Не знаю, что не так!Однако я смог получить правильный RSSI, когда он впервые подключился.

private Button.OnClickListener buttonRSSIOnClickListener = new Button.OnClickListener(){
  @Override
  public void onClick(View arg0) {
   // TODO Auto-generated method stub
   Intent intent = new Intent(BluetoothDevice.ACTION_FOUND);
   short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
   Toast.makeText(getApplicationContext(),"  RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show();

  }};

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

9 голосов
/ 24 августа 2011

Это не то, как вы используете намерение.Вы получаете -32768, потому что RSSI не находится в том намерении, которое вы только что создали, и заданный по умолчанию результат Short.MIN_VALUE (-32768).

Вам необходимо создать подкласс BroadcastReceiver и создатьIntentFilter (или используйте манифест) для получения намерения BluetoothDevice.ACTION_FOUND.

Вы не сможете сделать это "одним нажатием кнопки".Вы получите его только тогда, когда Android сгенерирует ACTION_FOUND.

Вот что-то близкое.Сам не запускал.

В onCreate ():

registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));

В другом месте:

private final BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        if(BluetoothDevice.ACTION_FOUND.equals(action)) {
            short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
            Toast.makeText(getApplicationContext(),"  RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show();
        }
    }
};

РЕДАКТИРОВАТЬ: На самом деле вы могли бы сделать это натребовать, если вы вызываете startDiscovery () на вашем адаптере Bluetooth изнутри onClick ().Это должно вызвать ACTION_FOUND для каждого обнаруживаемого устройства.

...