Zunächst einmal erfordert dieser Ansatz mindestens Api 16.
Ich werde diese Lösung in 3 Teile aufteilen, um dieses Problem umfassender zu lösen.
1. Wenn Sie die Anwendung in einem der folgenden Fälle beenden möchten Tätigkeit verwenden Sie dieses Codeschnipsel:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
2. Wenn Sie die Anwendung in einem der folgenden Fälle beenden möchten nicht Aktivität Klasse, die Zugriff auf Activity hat, dann verwenden Sie diesen Codeschnipsel:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
getActivity().finishAndRemoveTask();
}
3. Wenn Sie die Anwendung in einer Nicht-Activity-Klasse beenden möchten und nicht auf eine Activity wie z.B. einen Service zugreifen können, empfehle ich Ihnen, BroadcastReceiver zu verwenden. Sie können diesen Ansatz zu allen Ihren Aktivitäten in Ihrem Projekt hinzufügen.
Erstellen Sie die Instanzvariablen LocalBroadcastManager und BroadcastReceiver. Sie können getPackageName()+".closeapp" ersetzen, wenn Sie möchten.
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();
}
}
}
};
Fügen Sie diese zur onCreate()-Methode von Activity hinzu.
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Vergessen Sie auch nicht, den Empfänger in der onDestroy()-Methode von Activity abzumelden
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Für quit Anwendung, müssen Sie Broadcast mit LocalBroadcastManager, die ich in meinem PlayService Klasse, die Service erweitert verwenden senden.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));