Trước hết, cách tiếp cận này đòi hỏi tối thiểu Api 16.
Tôi sẽ chia giải pháp này thành 3 phần để giải quyết vấn đề này rộng rãi hơn.
1. Nếu bạn muốn thoát ứng dụng trong Hoạt động, hãy sử dụng đoạn mã này:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
finishAndRemoveTask();
}
2. Nếu bạn muốn thoát khỏi ứng dụng trong lớp Không hoạt động có quyền truy cập vào Hoạt động thì hãy sử dụng đoạn mã này:
if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
getActivity().finishAndRemoveTask();
}
3. Nếu bạn muốn thoát khỏi ứng dụng trong một lớp Không hoạt động và không thể truy cập vào Hoạt động như Dịch vụ, tôi khuyên bạn nên sử dụng BroadcastReceiver. Bạn có thể thêm phương pháp này vào tất cả các Hoạt động trong dự án của bạn.
Tạo các biến đối tượng LocalBroadcastManager và BroadcastReceiver. Bạn có thể thay thế getPackageName () + ". Đóng lại" nếu bạn muốn.
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();
}
}
}
};
Thêm chúng vào phương thức Activity của onCreate ().
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);
Ngoài ra, đừng quên gọi người nhận không đăng ký tại phương thức Hoạt động của onDestroy ()
mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);
Để thoát ứng dụng, bạn phải gửi truyền phát bằng LocalBroadcastManager mà tôi sử dụng trong lớp PlayService mở rộng Dịch vụ.
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));