Прежде всего, этот подход требует минимального 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. Если вы хотите , чтобы выйти из приложения в , не активность класса , который имеет доступ к деятельности , то используйте этот код:
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();
}
}
}
};
Добавьте это к методу onCreate () Activity.
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Также не забудьте вызвать незарегистрированный получатель в методе Activity из onDestroy ().
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Для выхода из приложения вы должны отправить широковещательную рассылку, используя LocalBroadcastManager, который я использую в своем классе PlayService, который расширяет Service.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));