2012-11-23 3 views
4

Mon application contient un socket de serveur Bluetooth ouvert avec un UUID spécifique, afin qu'un autre périphérique puisse se connecter et transférer des fichiers. Je suis un peu confus concernant le BroadcastReceiver.Bluetooth Server et BroadCastReceiver

Dans ma classe qui s'étend Activity, je veux vérifier l'état de l'adaptateur bluetooth. Mais mon BroadcastReceiver n'est jamais déclenché. J'essayé d'utiliser la BroadcastReceiver façon suivante:

public class MainClass extends Activity { 
    public void onCreate(Bundle b) { 
    super.onCreate(b); 
    IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); 
    registerReceiver(mReceiver, filter); 
} 

private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      final String action = intent.getAction(); 

      Log.w("BroadcastReceiver: ", "Inside!"); 

      if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { 
       final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); 
       switch (state) { 
       case BluetoothAdapter.STATE_OFF: 
        Log.d("Bluetooth Receiver", "State-off"); 
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
        break; 
       case BluetoothAdapter.STATE_TURNING_OFF: 
        Log.d("Bluetooth Receiver", "State turning off"); 
        break; 
       case BluetoothAdapter.STATE_ON: 
        Log.d("Bluetooth Receiver", "State-on"); 
        btCom = new BluetoothCommunicator(MainClass.this, lastCases, nist); 
        btCom.startServer(); 
        break; 
       case BluetoothAdapter.STATE_TURNING_ON: 
        Log.d("Bluetooth Receiver", "State turning on"); 
        break; 
       } 
      } 
     } 
    }; 

} 

J'ai une question concernant les États:

  • L'état STATE_ON est ce que décocha lorsque le Bluetooth est activé lors de l'exécution? Ou puis-je démarrer mon application avec Bluetooth activé, et cet événement sera déclenché? Parce que je veux commencer la méthode btCom.startServer() si Bluetooth est activé

Je lis aussi que je dois enregistrer le récepteur de radiodiffusion dans mon dossier Manifest, comment puis-je faire si le BroadcastReceiver est dans une classe qui étend l'activité ? Si j'avais cette BroadcastReceiver dans une catégorie distincte, je le ferais comme ça

Say pour instace que mon nom de package était com.workbench et mon nom de classe était BluetoothReceiver

Le Manifest ressemblerait à quelque chose comme ceci:

<receiver android:name="com.workbench.BluetoothReceiver"></receiver> 

Répondre

0

L'action de diffusion BluetoothAdapter.ACTION_STATE_CHANGED est envoyée lorsque l'état de l'adaptateur Bluetooth est modifié. Vous ne verrez cela que lorsque l'état de l'adaptateur est changé.

Vous pouvez vérifier l'état actuel de l'adaptateur Bluetooth en appelant le BluetoothAdapter.isEnabled().

Vous avez seulement besoin d'enregistrer le BroadcastReceiver dans votre manifeste si vous voulez obtenir la diffusion Intent lorsque votre application n'est pas en cours d'exécution. La façon dont vous avez implémenté le BroadcastReceiver (comme une classe anonyme) il n'est pas possible de l'enregistrer dans le manifeste.