短信广播接收器在一天后不会触发

时间:2017-06-13 05:11:57

标签: android broadcastreceiver sms

在我的应用中,每当我们收到消息时,都需要显示一个弹出预填充消息。为此,我在清单文件中使用了以下代码

 <receiver
        android:name="com.cte.broadcast.SMS_Receive_BroadCast"
        android:enabled="false">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

每当应用登录时,请使用以下代码注册广播接收器

         ComponentName component = new ComponentName(getApplicationContext(),
                        SMS_Receive_BroadCast.class);
                getApplicationContext().getPackageManager().setComponentEnabledSetting(component,
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                        PackageManager.DONT_KILL_APP);

每当应用程序登录时,使用以下代码取消注册广播接收器

ComponentName component_sms = new ComponentName(context.getApplicationContext(),
                SMS_Receive_BroadCast.class);
        getApplicationContext().getPackageManager().setComponentEnabledSetting(component_sms,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

所以这里一切都很好。什么时候我们登录,每当我们得到消息广播接收器触发器并弹出即使应用程序关闭。并注销没有获得触发广播接收器而不会弹出。所以一切都很好。但问题是,有一天我们收到消息后广播接收器即使登录也不会触发。但每当我们打开应用程序并关闭它时它就会正常工作。所以问题是在一段时间后广播接收器自动取消注册我认为..

那么如何解决这个问题。谢谢你提前..

2 个答案:

答案 0 :(得分:1)

某些应用程序会中止您的广播意图,这会阻止其他应用程序接收意图。

解决方案是增加intent-filter标记中的android:priority属性:

 <intent-filter android:priority="priority value">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
 </intent-filter>

答案 1 :(得分:0)

我遇到了类似的麻烦。我不确切知道为什么,但取决于你把你的registerBroadcast,android将杀死该实例,这是与linux上的进程执行堆栈相关的东西。 我做了什么来解决问题:创建一个后台服务而不是BroadcastReceiver,你注册你的BR,它会工作正常,几天=)))!