gpt4 book ai didi

Android:如何检查应用程序是否已进入后台以避免不需要的 BroadcastReceiver 检查

转载 作者:行者123 更新时间:2023-11-29 17:52:20 26 4
gpt4 key购买 nike

问题很简单:

说明:

我正在做的是有一个 BroadcastReceiver,每当 GPS 的状态发生变化(启用或禁用)时都会调用它,并在 GPS 被禁用时通知用户,邀请他重新启用它(启动相关 Intent ) .

我在我的应用程序的根 Activity 中启用(并最终禁用)它,这样它就会为每个子 Activity 调用。

当用户按下主页按钮(例如)或打开另一个应用程序并禁用 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);
}
}
}

在根 Activity 的 onCreate 和 onDestroy 上启用/禁用 Receiver 检查

@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。

最佳答案

这是 fragment 有用的原因之一。如果您有一个 Activity 管理多个 fragment ,则该 Activity 的 onPause()onResume() 将很好地处理注册和取消注册该接收器,没有 child Activity 的复杂性。

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

顺便说一句,问题写得很好。

关于Android:如何检查应用程序是否已进入后台以避免不需要的 BroadcastReceiver 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22036634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com