studio scanner para example dispositivos detectar desactivar connectedthread conexion buscar java android android-intent bluetooth

java - scanner - Android Bluetooth: detecta una desconexión de un dispositivo



detectar dispositivos bluetooth android studio (4)

Pruebe la acción android.bluetooth.device.action.ACL_DISCONNECTED en el filtro de intención. debería resolver tu problema.

Estoy tratando de atrapar un filtro de intención de desconexión del dispositivo bluetooth. Agregué un registro al onReceive pero nunca lo alcanza y no se muestra en el logcat. Sospecho que el problema es con mi configuración manifest.xml:

manifiesto:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="com.company.MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" /> <action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" /> <action android:name="android.bluetooth.adapter.action.DISCOVERY_STARTED" /> </intent-filter> </receiver> <activity android:name=".BTActivity" android:label="BTActivity" > </activity> </application> </manifest>

MyReceiver extiende BroadcastReceiver:

@Override public void onReceive(Context context, Intent intent) { Log.i("got-in", "got-in-"); // String action = intent.getAction(); BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.i("disconnect", device.getName()); Intent i = new Intent(context, BTActivity.class); Bundle b = new Bundle(); b.putString("deviceName", device.getName()); intent.putExtras(b); // Put your id to your next Intent context.startActivity(i); // finish(); }


Intente eliminar la <category .../> del filtro de intención y vuelva a intentarlo.


Use este código para recibir una desconexión (cuando Bluetooth todavía está encendido):

<intent-filter> <action android:name="android.bluetooth.device.action.ACL_CONNECTED" /> <action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" /> <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" /> </intent-filter>

También debe registrar un servicio que luego registra un receptor de difusión para cambiar el estado de Bluetooth, de modo que su aplicación sepa cuándo Bluetooth fue desconectado y por lo tanto descarta todos los dispositivos activos, ya que no recibirá un ACL_DISCONEXIÓN cuando Bluetooth simplemente se apaga.

@Override public int onStartCommand(Intent intent, int flags, int startId) { IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(bluetoothTurnedOnOff, filter); return START_STICKY; } private final BroadcastReceiver bluetoothTurnedOnOff = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_OFF) { [...]


Para nuevos usuarios. funcionará Su archivo de manifiesto se ve

<receiver android:name="(package name).BluetoothReceiver" > <intent-filter> <action android:name="android.bluetooth.device.action.ACL_CONNECTED" /> <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" /> </intent-filter> </receiver>

y su receptor se verá como

else if (intent.getAction().equals(`enter code here` BluetoothDevice.ACTION_ACL_DISCONNECTED)) { // connection lost