首先,这种方法要求最小Api 16。
为了更广泛地解决这个问题,我将把这个解决方案分为3个部分。
1. 如果你想在Activity中退出应用程序,请使用以下代码片段:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
2. 如果你想退出一个非Activity类的应用程序,可以访问Activity,那么使用下面的代码片段:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
getActivity().finishAndRemoveTask();
}
3.如果你想在非Activity类中退出应用程序,并且不能访问Activity(如Service),我建议你使用BroadcastReceiver。您可以将此方法添加到项目中的所有活动中。
创建LocalBroadcastManager和BroadcastReceiver实例变量。您可以替换getPackageName()+"。Closeapp”如果你想的话。
LocalBroadcastManager mLocalBroadcastManager;
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(getPackageName()+".closeapp")){
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
}
}
};
将这些添加到Activity的onCreate()方法。
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
另外,不要忘记在Activity的onDestroy()方法调用unregister receiver
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
对于退出应用程序,你必须使用LocalBroadcastManager发送广播,我在我的PlayService类中使用,它扩展了服务。
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));