2012-03-25 3 views
1

現在、2つのデバイスがBluetooth経由で通信できるようにアプリケーションを設定しようとしています。Bluetoothの検出可能性を変更するときにブロードキャストが送信されない

私にはButtonという単一の画面があります。このボタンをクリックすると、デバイスが検出可能になり、ボタンが無効になります。デバイスが検出不能になった場合、ボタンは再度有効になります。

のように私は見つけがを終了したときにを通知するBroadcastReceiverを登録Dev Guideに提案しました。

問題:

デバイスはもはや検出可能であるとき時々、私はどんな放送を受けません。一方、私は通常、発見可能性を入力するときに2つのブロードキャストを送信します。発見能力はうまく動作し、LogCatとデバイスが私の電話機(HTC Desire HD)を120秒間見ていることが証明されます。

この

はLogCatからレコードが2つのブロードキャストが始まる見つけた直後に受信されて表示される:

03-25 23:01:47.557: INFO/System.out(16905): --------broadcast received------------- 
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): current scan mode: 21 
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): previous scan mode: 23 
03-25 23:01:47.557: INFO/System.out(16905): --------broadcast received------------- 
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): current scan mode: 23 
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): previous scan mode: 21 

見つけやすさを開始する私のコードは次のようである:

private void becomeVisible() { 

    Intent discoverableIntent = new Intent(
      BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
    startActivityForResult(discoverableIntent, 
      CODE_REQUEST_MAKE_DISCOVERABLE); 

} 

マイBroadcastReceiverは次のようになります。

private final BroadcastReceiver discoverableModeChangedReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     System.out.println("--------broadcast received-------------"); 
     int scanMode = intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE, 
       0); 
     int scanModePrevious = intent.getIntExtra(
       BluetoothAdapter.EXTRA_PREVIOUS_SCAN_MODE, 0); 
     Log.d(TAG, "current scan mode: " + scanMode); 
     Log.d(TAG, "previous scan mode: " + scanModePrevious); 

     if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { 
      // show button 
      findViewById(R.id.btn_become_visible).setEnabled(false); 
     } else { 
      // hide button 
      findViewById(R.id.btn_become_visible).setEnabled(true); 
     } 
    } 
}; 

答えて

2

アクションを登録する必要があります最初:

IntentFilter intent = new IntentFilter(); 
intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); 
intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED); 
registerReceiver(discoverableModeChangedReceiver, intent); 
+0

受信者が登録されています。それが私の電話(欲望hd)だけで問題かもしれないかどうか知っていますか? –

関連する問題