Android 应用程序关闭时广播接收器不工作

Android 应用程序关闭时广播接收器不工作,android,Android,当用户收到任何短信时,我需要执行一些逻辑。当应用程序运行时,我的广播接收器工作正常,但如果我正在停止工作,那么它就不能按预期工作 有人能帮我吗?我已经尝试了互联网上所有可能的方法,但仍然没有任何效果 事先非常感谢你 我的广播接收器类别: public class EveryDay_SMSListener extends BroadcastReceiver { private SharedPreferences preferences; String msgBody ="";

当用户收到任何短信时,我需要执行一些逻辑。当应用程序运行时,我的广播接收器工作正常,但如果我正在停止工作,那么它就不能按预期工作

有人能帮我吗?我已经尝试了互联网上所有可能的方法,但仍然没有任何效果

事先非常感谢你

我的广播接收器类别:

public class EveryDay_SMSListener extends BroadcastReceiver {

    private SharedPreferences preferences;
    String msgBody ="";
    String msg_from;
    EveryDay_DataBase mydb;
    @Override
    public void onReceive(Context context, Intent intent) {

        Intent background = new Intent(context, EveryDay_Service.class);
        context.startService(background);
        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
            Bundle bundle = intent.getExtras();           
            SmsMessage[] msgs = null;
enter code here
            if (bundle != null){

                try{
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    msgs = new SmsMessage[pdus.length];
                    for(int i=0; i<msgs.length; i++){
                        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                        msgBody = msgBody+(msgs[i].getMessageBody()).toString();
                        msg_from = msgs[i].getOriginatingAddress();
                    }

                }catch(Exception e){
                }
            }
        }
    }

}
public类每日\u SMSListener扩展广播接收器{
私人共享参考偏好;
字符串msgBody=“”;
字符串msg_from;
数据库mydb;
@凌驾
公共void onReceive(上下文、意图){
意向背景=新意向(上下文、日常服务类);
启动服务(后台);
if(intent.getAction().equals(“android.provider.Telephony.SMS_RECEIVED”)){
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
在这里输入代码
if(bundle!=null){
试一试{
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];

对于(int i=0;i您说在清单中注册接收人对您不起作用,因此唯一剩下的选项是:

  • 创建一个前台服务,并在的
    onCreate
    中注册SMS接收器 它(不在清单中注册sms接收方)
  • 创建一个
    jobscheduler
    ,每(n)秒启动一次服务
  • 这是最后一个解决方案,但如果你在appkill和下一个jobscheduler工作之间运气不好,你可能会丢失短信,因此你可能希望(n)足够小


    更好的解决方案是拥有“阅读短信”权限,每次活动开始时,都会阅读android收件箱中的所有短信,看看是否丢失了任何短信。

    在最新版本的android中,当应用程序死机时,系统不会启动应用程序 并发出广播(对于大多数广播标志)

    实现此功能的方法您应该使用前台服务,一些链接可以帮助您实现此功能:


  • 注意,一些制造商甚至关闭这些服务以进行电池优化,如华为、三星等。因此,您应该添加特定于品牌的代码,以使用户不允许电池优化和自动关闭应用程序的服务。

    请发布您的接收器代码和您尝试注册的方式。为什么您在第一时间关闭应用程序地点?我在我的主要活动中注册它,如下所示:startService(new Intent(getBaseContext(),Daily_Service.class))@Bahman:我在测试每个场景,当应用程序未运行/停止时,我的广播不起作用“我在我的主要活动中注册它,就像这样”--这不是
    广播接收器。“我已经尝试了所有可能的方法"--然后您应该能够提供一个显示您尝试过的内容的链接。任何用于创建前台服务的参考链接……我尝试创建一个服务类,但面临与广播接收器相同的问题。当应用程序被终止时,它不会触发。@sonu有很多教程可供参考
    foregroundService
    timer
    在互联网上搜索一下。如果我想添加参考资料,我会做同样的事情:谷歌搜索。但是你会找到一个你更了解的。timer会解决问题吗?因为我需要在用户收到短信时运行我的逻辑,而这只有在广播接收到短信时才会发生er在正确的时间触发。@sonu这是最后一个解决方案,但如果你在应用程序终止和下一次计时器拍摄之间运气不好,你可能会丢失短信,因此你可能希望使(n)足够小。