在我的应用中,每当我们收到消息时,都需要显示一个弹出预填充消息。为此,我在清单文件中使用了以下代码
<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);
所以这里一切都很好。什么时候我们登录,每当我们得到消息广播接收器触发器并弹出即使应用程序关闭。并注销没有获得触发广播接收器而不会弹出。所以一切都很好。但问题是,有一天我们收到消息后广播接收器即使登录也不会触发。但每当我们打开应用程序并关闭它时它就会正常工作。所以问题是在一段时间后广播接收器自动取消注册我认为..
那么如何解决这个问题。谢谢你提前..
答案 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,它会工作正常,几天=)))!