广播接收器可在模拟器上运行,但不能在真实设备上运行(Android Oreo)

时间:2020-03-16 11:26:14

标签: android broadcastreceiver background-service

广播接收器在我杀死我的应用程序时可以完美地工作,它可以在后台工作。但是我 安装了我的真实设备,当我杀死应用程序时并没有。

> Java Code

    public class BackgroundService extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"Send Message",Toast.LENGTH_LONG).show();
    }
}

> MainActivity
     BackgroundService backgroundService;
      @Override
    protected void onStart() {
        super.onStart();
        IntentFilter intentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
        registerReceiver(backgroundService,intentFilter);
    }


> Manifests 



<uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

    <receiver android:name=".BackgroundService">
        <intent-filter android:priority="999">
            <action android:name="android.intent.action.SCREEN_ON"/>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

1 个答案:

答案 0 :(得分:1)

从android 8开始,如果您有任何隐式广播,则必须将其注册在活动中而不是清单中 就您而言

<action android:name="android.intent.action.SCREEN_ON"/> <action android:name="android.provider.Telephony.SMS_RECEIVED"/>

似乎是隐式广播。尝试使用 intentFilter.addAction(您的操作)

在活动类中注册它们

还通过 onStop 取消注册接收者 调用 unregisterReceiver(接收器实例)