Przede wszystkim takie podejście wymaga min Api 16.
Podzielę to rozwiązanie na 3 części, aby szerzej rozwiązać ten problem.
1. Jeśli chcesz zamknąć aplikację w działaniu, użyj tego fragmentu kodu:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
2. Jeśli chcesz zamknąć aplikację w klasie innej niż Activity, która ma dostęp do Activity, użyj tego fragmentu kodu:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
getActivity().finishAndRemoveTask();
}
3. Jeśli chcesz zamknąć aplikację w klasie innej niż Activity i nie możesz uzyskać dostępu do Activity, takiej jak Service, polecam użyć BroadcastReceiver. Możesz dodać to podejście do wszystkich swoich działań w swoim projekcie.
Utwórz zmienne instancji LocalBroadcastManager i BroadcastReceiver. Jeśli chcesz, możesz zastąpić 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();
}
}
}
};
Dodaj je do metody działania OnCreate ().
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Nie zapomnij też wywołać funkcji wyrejestrowania odbiornika w metodzie działania onDestroy ()
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Aby zakończyć aplikację, musisz wysłać transmisję za pomocą LocalBroadcastManager, którego używam w mojej klasie PlayService, która rozszerza usługę.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));