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

sms broadcast receiver not triggering after one day

在我的应用程序中,每当我们收到消息时,都需要显示一个带有预填充消息的弹出窗口。为此,我在清单文件

中使用了以下代码
 <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);

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

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

我遇到了类似的麻烦。我不知道为什么,但是根据你放置的 registerBroadcast,android 会杀死那个实例,它与 linux 上的进程执行堆栈有关。 我做了什么来解决这个问题:创建一个后台服务而不是 BroadcastReceiver,在那里你注册你的 BR 它会工作得很好,几天 =))) !

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

解决方法是在intent-filter标签中增加android:priority属性:

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