Перш за все, такий підхід вимагає мінімум Api 16.
Я розділю це рішення на 3 частини, щоб вирішити цю проблему ширше.
1. Якщо ви хочете вийти з програми в діяльності, скористайтеся цим фрагментом коду:
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. Якщо ви хочете вийти з програми в класі, що не належить до нього, і ви не можете отримати доступ до такої діяльності, як служба, я рекомендую вам використовувати 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 () діяльності.
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Крім того, не забудьте зателефонувати на незареєстрований приймач методом активності onDestroy ()
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Щоб вийти з програми, ви повинні надіслати трансляцію за допомогою LocalBroadcastManager, який я використовую у своєму класі PlayService, який розширює службу.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));