2012-03-25 3 views
1

Derzeit versuche ich eine Anwendung zu erstellen, die zwei Geräte über Bluetooth kommunizieren lässt.Es werden keine Broadcasts gesendet, wenn die Bluetooth-Erkennbarkeit geändert wird.

Ich habe einen Bildschirm mit einer einzigen Button. Wenn Sie auf diese Schaltfläche klicken, wird das Gerät erkennbar und die Schaltfläche deaktiviert. Wenn das Gerät nicht mehr erkannt werden kann, muss die Schaltfläche erneut aktiviert werden.

vorgeschlagen Wie im Dev Guide ich ein BroadcastReceiver registrieren benachrichtigt zu werden, wenn Auffindbarkeit endet.

Das Problem:

Manchmal Ich erhalte keine Sendung, wenn das Gerät nicht mehr auffindbar ist. Auf der anderen Seite, bekomme ich normalerweise 2 Sendungen gesendet, wenn die Auffindbarkeit eintritt. Die Auffindbarkeit funktioniert gut, was von LogCat und Geräten festgestellt wurde, die mein Telefon (HTC Desire HD) 120 Sekunden lang sahen.

Dies ist ein Rekord von LogCat zeigt zwei Sendungen unmittelbar nach Beginn der Auffindbarkeit empfangen werden:

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 

Mein Code die Auffindbarkeit Start ist die folgende:

private void becomeVisible() { 

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

} 

Meine BroadcastReceiver wie folgt aussieht:

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); 
     } 
    } 
}; 

Antwort

2

Sie müssen eine Aktion registrieren zuerst:

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

die Empfänger sind registriert. Weißt du, ob es nur ein Problem auf meinem Handy sein könnte (Wunsch HD)? –

Verwandte Themen