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版本。锁定这个答案