우선,이 접근법에는 최소 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();
}
}
}
};
Activity의 onCreate () 메소드에 추가하십시오.
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
또한 Activity의 onDestroy () 메소드에서 unregister 수신자를 호출하는 것을 잊지 마십시오
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
응용 프로그램을 종료하려면 서비스를 확장하는 PlayService 클래스에서 사용하는 LocalBroadcastManager를 사용하여 브로드 캐스트를 보내야합니다.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));