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:
- Plongeaient dans la documentation.
- Mis en place une instance locale de l'appareil hôte de l'adaptateur BT.
- Mis en œuvre une notification pour activer le BT si elle n'est pas activée.
- Enregistré Récepteurs de Radiodiffusion et les Intentions pour analyser les
ACTION_FOUNDs
de startDiscovery(). - 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
Vous devez vous connecter pour publier un commentaire.
Pour le dire simplement, vous devez utiliser
startDiscovery()
lorsque vous souhaitez que votre application pour découvrir les périphériques Bluetooth... par exemple, si vous avez voulu mettre en place unListActivity
que les contrôles et les ajoute dynamiquement les périphériques Bluetooth à proximité d'unListView
(voirDeviceListActivity
).De votre utilisation de l'
startDiscovery()
méthode devrait ressembler à quelque chose comme ceci:Définir une variable de classe représentatives de l'adaptateur Bluetooth.
Vérifier pour voir si votre appareil est déjà "la découverte". Si c'est le cas, annuler la découverte.
Immédiatement après vérification (et, éventuellement, de l'annulation) de la découverte-le mode de début de la découverte en appel,
Être très prudent en général accidentellement laisser votre appareil à la découverte du mode. Exécution de la découverte de périphériques est une procédure lourde pour l'adaptateur Bluetooth et consomme beaucoup de ressources. Par exemple, vous souhaitez assurez-vous de vérifier/annuler découverte avant de tenter d'établir une connexion. Probablement vous voulez annuler la découverte de votre
onDestroy
méthode de trop.Laissez-moi savoir si cela a aidé... et si vous rencontrez toujours des difficultés, de mettre à jour votre réponse avec votre logcat de sortie et/ou les messages d'erreur que vous obtenez, et peut-être je peux vous aider un peu plus.