Prima di tutto, questo approccio richiede un minimo di Api 16.
Dividerò questa soluzione in 3 parti per risolvere questo problema in modo più ampio.
1. Se si vuole uscire applicazione in un Activity utilizzare questo frammento di codice:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
2. Se si desidera chiudere l'applicazione in una classe non Activity che ha accesso all'Activity, utilizzare questo frammento di codice:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
getActivity().finishAndRemoveTask();
}
3. Se si desidera chiudere l'applicazione in una classe non Activity e non è possibile accedere ad Attività come Service, si consiglia di utilizzare BroadcastReceiver. Puoi aggiungere questo approccio a tutte le tue attività nel tuo progetto.
Creare variabili di istanza LocalBroadcastManager e BroadcastReceiver. Puoi sostituire getPackageName () + ". Closeapp" se vuoi.
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();
}
}
}
};
Aggiungili al metodo di attività onCreate ().
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Inoltre, non dimenticare di chiamare il ricevitore di annullamento della registrazione nel metodo di attività onDestroy ()
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Per chiudere l'applicazione, è necessario inviare la trasmissione utilizzando LocalBroadcastManager che utilizzo nella mia classe PlayService che estende il servizio.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));