黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述从最近的任务中删除应用程序时,Android静态BroadcastReceiver无法正常工作相关的知识,希望能为你提供帮助。
我是否知道静态声明的BroadcastReceiver是否能够接收广播,即使应用程序已从近期任务中删除?
我正在尝试收听蓝牙设备连接时播放的事件。
androidManifest.xml中
<
uses-permission android:name="android.permission.BLUETOOTH" />
<
uses-permission android:name="android.permission.VIBRATE" />
<
uses-permission android:name="android.permission.WAKE_LOCK" />
<
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<
application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<
activity android:name=".MainActivity">
<
intent-filter>
<
action android:name="android.intent.action.MAIN" />
<
category android:name="android.intent.category.LAUNCHER" />
<
/intent-filter>
<
/activity>
<
receiver android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<
intent-filter>
<
action android:name="FROM_SERVICE"/>
<
action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<
action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
<
action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<
/intent-filter>
<
/receiver>
<
/application>
my receiver.java
public class MyReceiver extends BroadcastReceiver {@Override
public void onReceive(Context context, Intent intent) {String action = intent.getAction();
Log.i("MyReceiver", intent.getAction());
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if ( BluetoothDevice.ACTION_ACL_CONNECTED.equals(action) ) {
Log.i("MyReceiver", "BT device connected!");
v.vibrate(500);
// Vibrate for 500 milliseconds
}
}
}
参考:
Why BroadcastReceiver works even when app is in background ?
Keep broadcast receiver running after application is closed
Android BroadcastReceiver Not being called after app closed from Running App List
答案即使您从最近的任务中删除它,静态声明的广播也会起作用。从开发人员站点添加文档。希望这可以帮助!
清单声明的接收器如果您在清单中声明了广播接收器,则系统会在发送广播时启动您的应用程序(如果应用程序尚未运行)。
【从最近的任务中删除应用程序时,Android静态BroadcastReceiver无法正常工作】注意:如果您的应用程序的目标是API级别26或更高级别,则不能使用清单来声明隐式广播的接收者(特定于您的应用程序的广播),除了一些免于该限制的隐式广播。在大多数情况下,您可以使用预定作业。
推荐阅读
- BroadcastReceiver需要android.permission.RECEIVE_BOOT_COMPLETED
- 如何将项目添加到具有Android Room中父实体的外键引用的子实体()
- APPWIDGET_UPDATE奥利奥兼容性
- AlarmManager和BroadcastReceiver的LocalNotification未在Android O(oreo)中启动
- Android - 使用广播接收器重新加载活动
- HM10与Arduino和Android BLE之间的蓝牙低功耗大数据传输
- 不运行时接收消息,Xamarin Android上的显式广播和隐式广播
- 即使屏幕在Android中被锁定,也会启动活动屏幕
- CONNECTIVITY_CHANGE在Android N的目标中已弃用