从最近的任务中删除应用程序时,Android静态BroadcastReceiver无法正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从最近的任务中删除应用程序时,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

答案

即使您从最近的任务中删除它,静态声明的广播也会起作用。从开发人员站点添加文档。希望这可以帮助!

清单声明的接收器如果您在清单中声明了广播接收器,则系统会在发送广播时启动您的应用程序(如果应用程序尚未运行)。

注意:如果您的应用程序的目标是API级别26或更高级别,则不能使用清单来声明隐式广播的接收者(特定于您的应用程序的广播),除了一些免于该限制的隐式广播。在大多数情况下,您可以使用预定作业。

以上是关于从最近的任务中删除应用程序时,Android静态BroadcastReceiver无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Android - WebSocket - 从最近使用的应用程序清除应用程序时,连接从服务中删除

从 Android 中最近的应用程序中刷出应用程序时服务停止

如果从“最近”中删除应用程序,Android Oreo 接收器将停止

Android:在应用程序关闭时从后台推送动态通知

以编程方式从最近的应用程序中删除应用程序

在某些任务杀手杀死应用程序后如何恢复android应用程序?