J'ai une méthode pour enregistrer les récepteurs de diffusion à l'aide de filtres d'intention afin de découvrir les périphériques Bluetooth.Comment attendre la fin de Broadcast Receiver
// global variable
String xpto = "empty";
Voici la méthode void:
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
App appState = ((App)getApplicationContext());
appState.setTeste("OLAAAAA");
String action = intent.getAction();
elementos = new Vector<String>();
String delimiter = "_";
String[] temp = null;
xpto = "OLA";
// When discovery finds a device
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// SO VAI VERIFICAR DO QUE ESTAO PRESENTES (DISCOVERABLE) OS QUE ESTAO PAIRED
if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
Log.v("TAG","PAIRED AND PRESENT="+device.getName());
temp = device.getName().split(delimiter);
}
int aux = 0;
if(temp != null)
{
for(int i =0; i < temp.length ; i++)
{
if(temp[aux].equals("SapoFit"))
{
elementos.add(temp[aux]+"_"+temp[aux+1]);
Log.v("TAG","Seleccionado="+temp[aux]+"_"+temp[aux+1]);
}
aux++;
}
elSelecionado = temp[0]+"_"+temp[0+1];
}
}
}
};
this.registerReceiver(mReceiver, filter);
Log.v("TAG","HERE COMES empty="+xpto.toString());
Mon problème est: parce que le code dans cette méthode est exécutée de manière séquentielle, le temps que j'essaie d'utiliser (dans cette méthode dans la séquence) certains variables globales que j'alloue dans Broadcast Receiver, elles sont toujours nul ou vides. J'ai cependant dans certaines "solutions" comme déplacer mon "code principal" d'un endroit à un récepteur de diffusion, ou avoir une autre variable globale alocatée à 1 quand BR est fini (et un temps x =! 1 dans le code principal attendre) mais ce n'est pas une bonne programmation, je suis sûr qu'il y a une bonne façon de le faire.
J'ai trouvé PendingResult mais le niveau API 11 est trop élevé pour moi. Aucune suggestion?
Je mets ce code http://pastebin.com/mXG6iyW6 la classe App dans un autre fichier et ajouté cela dans le manifeste, mais je reçois toujours des valeurs nulles. Qu'est-ce que je ne comprends pas? – Tiago
J'ai édité mon code pour que vous puissiez comprendre mon problème. – Tiago
Je vais jeter un coup d'oeil. Null est juste une de ces choses que nous devons traiter. :) –