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>