關於android退出系統的代碼網上很多
但大部分是不行的,比如
System.exit(0);//只能退出當前activity
還有
ActivityManager activityMgr= (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
activityMgr.restartPackage(getPackageName());
等都能對當前activity,可有時我們的activity 實例不只一個
這裏有一個很好的辦法就是使用廣播BroadcastReceiver(廣播的介紹自己去google下),這裏直接貼出代碼,代碼可以在一個基礎Activity然後其他Activity繼承改基類, 也可以寫到每個activity裏,以下代碼是直接寫到activity裏
MainActivity.java
public class MainActivity extends Activity{
public final static String BORADCAST_ACTION_EXIT = "com.wangzhj.exit";//關閉活動的廣播action名稱
........
@Override
protected void onCreate(Bundle savedInstanceState) {
........
// 在當前的activity中註冊廣播
IntentFilter filter = new IntentFilter();
filter.addAction(BORADCAST_ACTION_EXIT);//爲BroadcastReceiver指定一個action,即要監聽的消息名字
registerReceiver(mBoradcastReceiver,filter); //動態註冊監聽 靜態的話 在AndroidManifest.xml中定義
}
private BroadcastReceiver mBoradcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(BORADCAST_ACTION_EXIT)){//發來關閉action的廣播
finish();
}
}
};
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(mBoradcastReceiver); //取消監聽
}
//返回按鈕 退出系統
@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setTitle("提示")
.setMessage("請確認退出系統?")
.setPositiveButton("退出", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(BORADCAST_ACTION_EXIT);
sendBroadcast(intent);//發送退出系統廣播 每個接收器都會收到 調動finish()關閉activity
finish();
}
})
.setNegativeButton("按錯了...", null)
.show();
}
.......
}
另外一個activity.java
public class OtherActivity extends Activity {
.......
@Override
protected void onCreate(Bundle savedInstanceState) {
// 在當前的activity中註冊廣播
IntentFilter filter = new IntentFilter();
filter.addAction(MainActivity.BORADCAST_ACTION_EXIT);//爲BroadcastReceiver指定一個action,即要監聽的消息名字
registerReceiver(mBoradcastReceiver,filter); //動態註冊監聽 靜態的話 在AndroidManifest.xml中定義
}
private BroadcastReceiver mBoradcastReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(MainActivity.BORADCAST_ACTION_EXIT)){//發來關閉action的廣播
finish();
}
}
};
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(mBoradcastReceiver); //取消監聽
}
........
}
如果有多個activity都加上以上代碼就可以實現程序完全退出功能。