Primeiro de tudo, essa abordagem requer min Api 16.
Vou dividir esta solução em 3 partes para resolver esse problema mais amplamente.
1. Se você deseja sair do aplicativo em uma Atividade, use este trecho de código:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
2. Se você deseja sair do aplicativo em uma classe não Activity que tenha acesso a Activity, use este trecho 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. Se você deseja sair do aplicativo em uma classe que não seja Activity e não pode acessar atividades como Service, eu recomendo que você use BroadcastReceiver. Você pode adicionar essa abordagem a todas as suas atividades no seu projeto.
Crie variáveis de instância LocalBroadcastManager e BroadcastReceiver. Você pode substituir getPackageName () + ". Closeapp" se desejar.
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();
}
}
}
};
Adicione-os ao método de atividade onCreate ().
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Além disso, não se esqueça de chamar unregister receiver no método de atividade onDestroy ()
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Para sair do aplicativo, você deve enviar a transmissão usando LocalBroadcastManager, que eu uso na minha classe PlayService, que estende o Serviço.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));