Android:如何检查应用程序是否已被带到后台以避免不必要的检查

Android:如何检查应用程序是否已被带到后台以避免不必要的检查,android,gps,broadcastreceiver,minimized,android-homebutton,Android,Gps,Broadcastreceiver,Minimized,Android Homebutton,问题很简单: 说明: 我正在做的是有一个广播接收器,每当GPS的状态改变(启用或禁用)时,它就被称为广播接收器,并通知用户GPS是否已禁用,邀请用户重新启用它(启动相对意图) 我在应用程序的根活动中启用(并最终禁用)它,这样每个子活动都会调用它 当用户按下主页按钮(例如)或打开另一个应用程序并禁用GPS时,我的问题就出现了通知仍然会出现,将我的应用程序带到前台。 代码 广播接收机 public class GPSStatusReceiver extends BroadcastReceiver {

问题很简单:

说明: 我正在做的是有一个广播接收器,每当GPS的状态改变(启用或禁用)时,它就被称为广播接收器,并通知用户GPS是否已禁用,邀请用户重新启用它(启动相对意图)

我在应用程序的根活动中启用(并最终禁用)它,这样每个子活动都会调用它

当用户按下主页按钮(例如)或打开另一个应用程序并禁用GPS时,我的问题就出现了通知仍然会出现,将我的应用程序带到前台。

代码 广播接收机

public class GPSStatusReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String provider = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

        if (!provider.contains(LocationManager.GPS_PROVIDER)) {
            Intent gpsIntent = new Intent(context, GPSDialogActivity.class);
            gpsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            gpsIntent.putExtra(GPSDialogActivity.GPS_DIALOG_TITLE, "Attivazione GPS");
            gpsIntent.putExtra(GPSDialogActivity.GPS_DIALOG_MESSAGE, "E' necessario abilitare il GPS. Cliccare su 'Usa satelliti GPS'.");
            context.startActivity(gpsIntent);
        }
    }
}
启用/禁用根活动的onCreate和onDestroy上的接收器检查

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    *
    *
    Stuff
    *
    *

    ComponentName component=new ComponentName(this, GPSStatusReceiver.class);
    getPackageManager()
        .setComponentEnabledSetting(component,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}

@Override
protected void onDestroy() {

    *
    *
    Stuff
    *
    *
    *

    ComponentName component=new ComponentName(this, GPSStatusReceiver.class);
    getPackageManager()
        .setComponentEnabledSetting(component,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
    super.onDestroy();
}
主要需要 我需要的是在应用程序进入后台时禁用BroadcastReceiver调用,并在应用程序返回前台时启用它

什么最好 根据上述需要:


如果用户在应用程序处于后台时禁用GPS(这样他就不会收到任何通知),当他将应用程序再次带回到前台时,我会截取它并手动检查GPS状态,并最终通知用户启用GPS。

这就是碎片有用的原因之一。如果您有一个
活动
管理多个片段,则该活动的
onPause()
onResume()
将很好地处理注册和取消注册该接收者的操作,而不会导致子活动的复杂化

除此之外,我建议将活动子类化为“GpsReceiverActivity”,处理其中接收器的注册和注销,并将其用作您希望广播接收的所有其他活动的基类


顺便提一下,这个问题写得很好

使用活动的onPause方法?不,它不起作用,因为如果我在onPause上禁用了BroadcastReceiver,当我启动一个新的子活动时,onPause将被调用,广播将不再起作用。回答很好,我没有想过。我会尽快改变,因为我的整个解决方案有40个活动。。。这需要一段时间。我一做就告诉你结果+对我的问题我很感激(我给了你)非常有效!我正在为项目中的每个活动开始迁移到此自定义类。。。。多么漫长的工作啊!