Objetivo: Cree una aplicación de Android que descubra los nombres y las direcciones de los dispositivos BT dentro del alcance y envíe sus valores a un servicio web. Los dispositivos BT no han sido enlazados previamente al dispositivo host, solo quiero sondear todo mientras camino.Detección de dispositivo Bluetooth en Android - startDiscovery()
lo que he hecho:
- con poros más documentación.
- Implementé una instancia local del adaptador de BT del dispositivo host.
- Implementé una notificación para habilitar BT si no está habilitado.
- Receptores y extensiones de difusión registrados para analizar el
ACTION_FOUNDs
que procede de startDiscovery(). - Registrado BLUETOOTH y BLUETOOTH_ADMIN permisos en el manifiesto.
Las cosas funcionan (como se ha probado con el registro incremental de la consola) hasta startDiscovery()
.
frustración:
- startDiscovery() - sospecho que estoy pasando esto en el contexto equivocado. ¿En qué contexto necesita ubicarse este método para funcionar correctamente?
Si ha podido hacer funcionar este método, le agradecería mucho su sabiduría.
ACTUALIZACIÓN - aquí hay una versión simplificada del código que me está causando dolor; esta simplificación recapitula mi error. Este código se ejecuta, no arroja errores cat.log
u otros errores, simplemente no da ningún resultado.
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);
}
}
}
}
Ayudaría saber el error que está recibiendo ... o al menos qué le está haciendo creer exactamente que 'startDiscovery()' funciona incorrectamente. –