繁体   English   中英

广播接收器在模拟器上工作但不在真实设备上工作(Android Oreo)

[英]Broadcast receiver working on emulator but not on working real device (Android Oreo)

广播接收器在我杀死我的应用程序时它工作得很好,它在后台工作。 但我安装了我的真实设备,当我杀死应用程序时却没有。

> 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>

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

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

似乎是隐式广播。 尝试使用intentFilter.addAction(Your Action)在您的活动类中注册它们

还可以通过调用unregisterReceiver(Receiver instance)onStop 中取消注册您的接收

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM