Android 应用程序不在当前位置时在后台广播接收器

Android 应用程序不在当前位置时在后台广播接收器,android,broadcastreceiver,Android,Broadcastreceiver,我正在尝试创建一个应用程序,每当电池电量发生变化时,它都会对电池电量进行烘烤。我正在使用广播接收器,该接收器已注册为“动作电池更换”。只有当应用程序仍处于最近状态(即应用程序未关闭)时,它才能在后台正常工作,但当应用程序关闭时,它不工作 ['ACTION_BATTERY_CHANGED'在电池级别更改时启动。] 代码如下: public class MainActivity extends AppCompatActivity { @Override protected void onCreat

我正在尝试创建一个应用程序,每当电池电量发生变化时,它都会对电池电量进行烘烤。我正在使用广播接收器,该接收器已注册为“动作电池更换”。只有当应用程序仍处于最近状态(即应用程序未关闭)时,它才能在后台正常工作,但当应用程序关闭时,它不工作

['ACTION_BATTERY_CHANGED'在电池级别更改时启动。]

代码如下:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //registering the reciever.
    this.registerReceiver(this.mBatInfoReciever,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

}
private BroadcastReceiver mBatInfoReciever = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int level = intent.getIntExtra("level",0);
        /*To get the Battery Level.*/

        Toast t=Toast.makeText(getApplicationContext(),String.valueOf(level),Toast.LENGTH_LONG);
        t.show();

    }

};


}

一旦您的
main活动
被销毁,您的
BroadcastReceiver
就会消失。这将发生:

  • 如果用户按下BACK键,或
  • 如果用户通过其他方式(例如,按HOME)离开,并且您的进程终止

您似乎将“应用程序已关闭”定义为当用户将应用程序从概览屏幕(最近的任务列表)中滑出时。这通常会终止应用程序的进程,因此此时您的
BroadcastReceiver
将消失。

一旦您的
main活动被销毁,您的
BroadcastReceiver
就会消失。这将发生:

  • 如果用户按下BACK键,或
  • 如果用户通过其他方式(例如,按HOME)离开,并且您的进程终止

您似乎将“应用程序已关闭”定义为当用户将应用程序从概览屏幕(最近的任务列表)中滑出时。这通常会终止应用程序的进程,因此您的
BroadcastReceiver
将在该点消失。

通过说“应用程序已关闭”,我的意思是应用程序未在后台运行。如果我启动应用程序并按下home(主页)按钮(例如:假设我按下home并启动其他应用程序,它仍会提升电池电量),那么它工作正常;但是,一旦我从最近的应用程序中删除,它就不起作用了。请指导应该做什么,以便即使在应用程序关闭时也可以运行。@PremBharwani:“我的意思是应用程序没有在后台运行”——这意味着您的进程被终止。你的
BroadcastReceiver
此时不见了。好吧,但为什么我的BroadcastReceiver不见了?我没有在类的OnCreate()方法中创建它。那么,当应用程序关闭时,我可以通过哪些方法实现这一点?多谢各位@CommonsWare@PremBharwani:“但是为什么我的BroadcastReceiver不见了?”--当进程终止时,内存中的所有应用程序都不见了。“那么,当应用程序关闭时,我可以通过哪些方法来实现这一点?”——一般来说,你不会。该广播用于运行可能希望根据电池电量变化改变行为的应用程序。从Android 8.0开始,大多数系统广播都是这样的:它们只发送给正在运行的应用程序。你可以尝试使用前台服务,让你的
BroadcastReceiver
让你的进程运行更长时间。我完全理解!谢谢!(我不能投票,对此我很抱歉)说“应用程序已关闭”,我的意思是应用程序没有在后台运行。如果我启动应用程序并按下home(主页)按钮(例如:假设我按下home并启动其他应用程序,它仍会提升电池电量),那么它工作正常;但是,一旦我从最近的应用程序中删除,它就不起作用了。请指导应该做什么,以便即使在应用程序关闭时也可以运行。@PremBharwani:“我的意思是应用程序没有在后台运行”——这意味着您的进程被终止。你的
BroadcastReceiver
此时不见了。好吧,但为什么我的BroadcastReceiver不见了?我没有在类的OnCreate()方法中创建它。那么,当应用程序关闭时,我可以通过哪些方法实现这一点?多谢各位@CommonsWare@PremBharwani:“但是为什么我的BroadcastReceiver不见了?”--当进程终止时,内存中的所有应用程序都不见了。“那么,当应用程序关闭时,我可以通过哪些方法来实现这一点?”——一般来说,你不会。该广播用于运行可能希望根据电池电量变化改变行为的应用程序。从Android 8.0开始,大多数系统广播都是这样的:它们只发送给正在运行的应用程序。你可以尝试使用前台服务,让你的
BroadcastReceiver
让你的进程运行更长时间。我完全理解!谢谢!(我不能投票,对此我很抱歉)