Découverte de périphérique Bluetooth dans Android - startDiscovery ()

Objectif: Construire une application Android qui découvre les noms et adresses des périphériques BT sein de la gamme et soumet leurs valeurs à un webservice. BT appareils n'ont pas été précédemment lié à l'appareil hôte, je veux juste un sondage tout comme je marche environ.

Ce que j'ai fait:

  1. Plongeaient dans la documentation.
  2. Mis en place une instance locale de l'appareil hôte de l'adaptateur BT.
  3. Mis en œuvre une notification pour activer le BT si elle n'est pas activée.
  4. Enregistré Récepteurs de Radiodiffusion et les Intentions pour analyser les ACTION_FOUNDs de startDiscovery().
  5. Enregistré BLUETOOTH et BLUETOOTH_ADMIN autorisations dans le manifeste.

Les choses fonctionnent (testé avec des différentiels de journalisation de la console) jusqu' startDiscovery().

Frustration:

  • startDiscovery() -- je crois bien que je suis de passage ce dans le mauvais contexte. Quel contexte cette méthode doivent être placés à l'intérieur pour bien fonctionner?

Si vous avez été en mesure d'obtenir cette méthode de travail, je serais très heureux de votre sagesse.

Mise à JOUR - voici une dépouillé version simplifiée du code qui est à l'origine de m'chagrin; cette simplification récapitule mon erreur. Ce code s'exécute, il ne jette aucun cat.log erreurs ou d'autres erreurs, il n'a tout simplement pas de sortie.

package aqu.bttest;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.Toast;
public class BT2Activity extends Activity {
private BluetoothAdapter mBTA;
private SingBroadcastReceiver mReceiver;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//register local BT adapter
mBTA = BluetoothAdapter.getDefaultAdapter();
//check to see if there is BT on the Android device at all
if (mBTA == null){
int duration = Toast.LENGTH_SHORT;
Toast.makeText(this, "No Bluetooth on this handset", duration).show();
}
//let's make the user enable BT if it isn't already
if (!mBTA.isEnabled()){
Intent enableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBT, 0xDEADBEEF);
}
//cancel any prior BT device discovery
if (mBTA.isDiscovering()){
mBTA.cancelDiscovery();
}
//re-start discovery
mBTA.startDiscovery();
//let's make a broadcast receiver to register our things
mReceiver = new SingBroadcastReceiver();
IntentFilter ifilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, ifilter);
}
private class SingBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); //may need to chain this to a recognizing function
if (BluetoothDevice.ACTION_FOUND.equals(action)){
//Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//Add the name and address to an array adapter to show in a Toast
String derp = device.getName() + " - " + device.getAddress();
Toast.makeText(context, derp, Toast.LENGTH_LONG);
}
}
}

}

source d'informationauteur Lemminkainen