ก่อนอื่นวิธีนี้ต้องใช้ขั้นต่ำ 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"));