android 基於BroadcastReceiver廣播 完全退出應用的實現代碼 親測可以

關於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都加上以上代碼就可以實現程序完全退出功能。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章