Java Android Broadcastreceiver仅在待机状态或应用程序处于非活动状态

Java Android Broadcastreceiver仅在待机状态或应用程序处于非活动状态,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,如果应用程序进入后台或手持设备处于待机状态(已锁定),我希望我的应用程序中的Broadcastreceiver刚刚启动。因此,我通过onPause()onDestroy()和onResume()尝试了它,但有时它会激活/停用,因为这些方法是不规则激发的。是否有更好的解决方案来实现我的目标 我的代码: public void enableBroadcastReceiver(){ IntentFilter filter = new IntentFilter(); filter.add

如果应用程序进入后台或手持设备处于待机状态(已锁定),我希望我的应用程序中的
Broadcastreceiver
刚刚启动。因此,我通过
onPause()
onDestroy()
onResume()
尝试了它,但有时它会激活/停用,因为这些方法是不规则激发的。是否有更好的解决方案来实现我的目标

我的代码:

public void enableBroadcastReceiver(){
    IntentFilter filter = new IntentFilter();
    filter.addAction("com.google.android.c2dm.intent.RECEIVE");
    filter.addAction("com.google.android.c2dm.intent.REGISTRATION");
    filter.addCategory("xxx");
    receiver = new GcmBroadcastReceiver();
    registerReceiver(receiver, filter);
    Toast.makeText(getApplicationContext(), "Enabled broadcast receiver", Toast.LENGTH_SHORT).show();
    receiver_working = true;
   }

public void disableBroadcastReceiver(){
    try {
        unregisterReceiver(receiver);
        Toast.makeText(getApplicationContext(), "Disabled broadcst receiver", Toast.LENGTH_SHORT).show();
        receiver_working = false;
    } catch (IllegalArgumentException e) {
    }
   }

@Override
public void onResume() {
    super.onResume();
    if(receiver_working) {
        disableBroadcastReceiver();
    }
}

@Override
public void onPause() {
    super.onPause();
    if(!receiver_working) {
        enableBroadcastReceiver();
    }
}

@Override
public void onDestroy() {
    super.onDestroy();
    if(receiver_working) {
        disableBroadcastReceiver();
    }
}

当设备处于睡眠模式时,您可以在接收机内部检查此情况,而不是禁用接收机

在你的接收器里面,你可以简单地放一个if,它将检查是否有一个活动的应用程序(例如,你可以通过调用isScreenOn方法来检查屏幕是否关闭)


我希望这就是你一直在寻找的;)

我相信实现所需行为的方法是在清单中注册您的
BroadcastReceiver
类,然后使用
PackageManager.setComponentEnabledSetting()在
onPause
/
onResume
方法中启用/禁用它
.onPause/onResume在描述的时刻经常触发,但并不精确,这就是为什么我不能真正使用此方法的原因。抱歉,错过了这一部分。然而,这些方法是你知道什么时候一项活动被放在背景/被带到前台的唯一方法。他们到底是如何不定期地为你开火的?当手机被锁定时,这将有助于解决问题的一部分,但如何检查应用程序在后台是否处于非活动状态?这取决于应用程序运行的Android版本。锁定这个答案