3

ボタンをクリックするだけで、接続されているBluetoothデバイスの現在のRSSI値を取得しようとしています。ただし、常に-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();

  }};

誰か助けてくれませんか?

4

1 に答える 1

9

これはインテントの使用方法ではありません。RSSI が作成したインテントに含まれておらず、指定したデフォルトの結果が Short.MIN_VALUE (-32768) であるため、-32768 を取得しています。

BluetoothDevice.ACTION_FOUND インテントを受け取るには、BroadcastReceiver をサブクラス化し、IntentFilter を作成する (またはマニフェストを使用する) 必要があります。

「ボタンをクリックするだけで」これを行うことはできません。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();
        }
    }
};

編集:実際には、onClick() 内から BluetoothAdapter で startDiscovery() を呼び出すと、オンデマンドで実行できる場合があります。これにより、検出されたデバイスごとに ACTION_FOUND がトリガーされます。

于 2011-08-24T02:25:28.220 に答える