【发布时间】:2017-06-13 13:32:20
【问题描述】:
在我的应用程序中,每当我们收到消息时,都需要显示一个带有预填充消息的弹出窗口。为此,我在清单文件中使用了以下代码
<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);
所以这里一切正常。当我们登录时,每当我们收到消息广播接收器触发并弹出甚至应用程序关闭时。并注销没有触发广播接收器并且没有弹出。所以到这一切都很好。但问题是一天之后,每当我们收到消息时,广播接收器即使已登录也不会触发。但是每当我们打开应用程序并关闭它时,它就会正常工作。所以问题是在一段时间后,我认为广播接收器会自动取消注册..
那么如何解决这个问题..提前谢谢..
【问题讨论】:
-
您在什么设备上遇到此问题?
-
所有设备都有问题
-
您何时/在何处将组件设置为 DISABLED?
-
我也不明白您为什么要启用和禁用您的接收器。您可以一直启用接收器,并忽略任何您不想操作的触发器。
-
如果应用程序已注销,则只需注销接收器即可。如果它没有取消注册,那么总是触发广播接收器..它消耗电池电量并降低应用程序性能..
标签: android broadcastreceiver sms