android - por - ¿Cómo detectar el cambio de estado de Bluetooth utilizando un receptor de difusión?
enviar numeros por bluetooth arduino (3)
Desafortunadamente, para las aplicaciones dirigidas a la API 26 o superior, los receptores de difusión declarados manifiestos ya no funcionan (consulte aquí https://developer.android.com/guide/components/broadcast-exceptions ), con algunas excepciones. android.bluetooth.adapter.action.STATE_CHANGED no está en esa lista.
Para bluetooth, solo puedes escuchar los cambios en:
ACTION_CONNECTION_STATE_CHANGED, ACTION_CONNECTION_STATE_CHANGED, ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECTED
Estoy tratando de hacer una aplicación que muestre un brindis cuando el Bluetooth del dispositivo está encendido. Quiero hacer eso incluso cuando mi aplicación no se está ejecutando. Así que debería usar un receptor de difusión, agregar algunos permisos, un filtro de intención al manifiesto de Android y crear una clase Java, pero no conozco los detalles.
¿Que debería hacer? ¿Qué permisos debo usar?
En cuanto a los permisos, para detectar el cambio de estado del bluetooth, debe agregarlo a su AndroidManifest.xml.
<uses-permission android:name="android.permission.BLUETOOTH" />
Un receptor de ejemplo se vería así, agregue este código a donde quiera manejar la transmisión, por ejemplo, una actividad:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive (Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
if(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1)
== BluetoothAdapter.STATE_OFF)
// Bluetooth is disconnected, do handling here
}
}
};
Para usar el receptor, necesitas registrarlo. Que puedes hacer de la siguiente manera. Registro el receptor en mi actividad principal.
registerReceiver(this, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
También puede decidir agregar todo a su AndroidManifest.xml. De esta manera usted puede hacer una clase especial para el receptor y manejarlo allí. No es necesario registrar el receptor, solo haga la clase y agregue el siguiente código al AndroidManifest
<receiver
android:name=".packagename.NameOfBroadcastReceiverClass"
android:enabled="true">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
</intent-filter>
</receiver>
Tienes que tomar el siguiente permiso.
<uses-permission android:name="android.permission.BLUETOOTH" />
y tienes que escribir esto como tu filtro de intención en la etiqueta del receptor.
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />