问题很简单:
说明:
我所做的是有一个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启用/禁用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。
这就是碎片有用的原因之一。如果您有一个Activity
管理多个片段,那么该"活动"的onPause()
和onResume()
将很好地处理注册和注销该接收器,而不会使子活动复杂化。
除此之外,我建议将Activity子类化为"GpsReceiverActivity",在其中处理接收器的注册和注销,并将其用作所有其他活动的基类
顺便说一句,这个问题写得不错。