不同品牌手机的广播接收器有多可靠?

时间:2018-05-25 14:41:20

标签: android android-service android-broadcast

我已宣布为android.intent.action.PHONE_STATEandroid.intent.action.NEW_OUTGOING_CALL宣布广播。我从最近的应用程序屏幕中删除了我的应用程序。我在两部手机上测试过它:

  1. MOTO G4 Play(Nougat) - 在我从这款手机的Recent apps屏幕上删除我的应用后,我收到了广播。
  2. 华硕(Lollipop) - 在我从这款手机上的“近期应用”界面中删除我的应用后,我没有收到广播。
  3. 在我阅读这些问题之后,我得到的一个方法就是我可以通过启动一个粘性服务来做到这一点,所以它将做的不是终止我的过程而且我将继续获得广播。

    我应该怎样做才能确保在不使用服务的情况下在每部手机上接收广播?

    Edit-1:我在Manifest

    中注册我的广播如下
     `
            <receiver android:name=".PhonecallReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.PHONE_STATE"
                        android:enabled="true"/>
                </intent-filter>
                <intent-filter>
                    <action android:name="android.intent.action.NEW_OUTGOING_CALL"
                        android:enabled="true"/>
                </intent-filter>
            </receiver>
        `
    
         @Override
        public void onReceive(Context context, Intent intent) {
                Log.e("onReceive ","Called"); //This is how I check whether broadcast was called or not
                //... other code
        }
    

1 个答案:

答案 0 :(得分:1)

考虑通知广播,可用于为您的应用生成通知,因此广播非常可靠。

您正在使用清单声明的广播,因此理论上,您应该能够接收广播,无论您的应用是在前景还是后台(由于您的应用针对相同的API,所有手机都会出现类似行为)。但是有些情况下,移动设备忽略/错误了一些合同,因此某些预期的行为会中断。在您的基于ASUS的测试中,很可能发生了类似的事情。 来自广播管理员文档,

  

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

然而有异常.Android最近对此行为进行了一些更新以限制其中一些功能。

  

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

所以我认为只要你的API级别低于26,你应该接收所有广播,无论你的应用是否活跃。继续使用API​​ 26或更高版本,您将接收广播,无论是否根据上述报价明确或免除广播。

您遇到的可能是设备特定的问题,这是不应该发生的。尝试在更多设备上进行测试以排除这种情况。

您可能需要阅读this以获得更多说明。

P.S。尽量不要使用Log.e("onReceive ","Called");

等信息/调试的错误记录