En primer lugar, este enfoque requiere min Api 16.
Dividiré esta solución en 3 partes para resolver este problema más ampliamente.
1. Si desea salir de la aplicación en una Actividad, use este fragmento de código:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
2. Si desea salir de la aplicación en una clase que no sea Activity y que tenga acceso a Activity, use este fragmento de código:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
getActivity().finishAndRemoveTask();
}
3. Si desea salir de la aplicación en una clase que no sea de Actividad y no puede acceder a Actividad como Servicio, le recomiendo que use BroadcastReceiver. Puede agregar este enfoque a todas sus actividades en su proyecto.
Cree variables de instancia LocalBroadcastManager y BroadcastReceiver. Puede reemplazar getPackageName () + ". Closeapp" si lo desea.
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();
}
}
}
};
Agregue estos al método de Actividad onCreate ().
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Además, no olvide llamar al receptor para cancelar el registro en el método de actividad onDestroy ()
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Para salir de la aplicación, debe enviar la transmisión utilizando LocalBroadcastManager que uso en mi clase PlayService que extiende el Servicio.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));