通過廣播關閉應用程序(每個Activity)和連續點擊兩次返回鍵關閉應用程序

對於一個應用程序可能有很多個Activity,可能每個人並不想一個個的去關閉Activity,也有可能忘了,那怎麼關閉所有的未關閉的Activity呢,其實有很多方法,但是我最喜歡的一種就是通過廣播事件去關閉,這樣簡單易懂,方便操作,很快捷。

首先就是建立一個父類,讓所有的activity繼承父類,這樣就不用每次都去註冊廣播,只要在父類註冊好就行了,代碼如下:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package net.loonggg.test;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.BroadcastReceiver;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.content.IntentFilter;  
  8.   
  9. public class BaseActivity extends Activity {  
  10.     /** 
  11.      * 關閉Activity的廣播,放在自定義的基類中,讓其他的Activity繼承這個Activity就行 
  12.      */  
  13.     protected BroadcastReceiver finishAppReceiver = new BroadcastReceiver() {  
  14.         @Override  
  15.         public void onReceive(Context context, Intent intent) {  
  16.             finish();  
  17.         }  
  18.     };  
  19.   
  20.     @Override  
  21.     public void onResume() {  
  22.         super.onResume();  
  23.         // 在當前的activity中註冊廣播  
  24.         IntentFilter filter = new IntentFilter();  
  25.         filter.addAction("net.loonggg.exitapp");  
  26.         this.registerReceiver(this.finishAppReceiver, filter);  
  27.     }  
  28.   
  29.     @Override  
  30.     protected void onDestroy() {  
  31.         super.onDestroy();  
  32.         this.unregisterReceiver(this.finishAppReceiver);  
  33.     }  
  34. }  
其次就是子類繼承,代碼如下:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package net.loonggg.test;  
  2.   
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.KeyEvent;  
  6. import android.view.View;  
  7. import android.widget.Button;  
  8. import android.widget.Toast;  
  9.   
  10. public class MainActivity extends BaseActivity {  
  11.     private Button btn;  
  12.   
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.         btn = (Button) findViewById(R.id.btn);  
  18.   
  19.         btn.setOnClickListener(new View.OnClickListener() {  
  20.   
  21.             @Override  
  22.             public void onClick(View v) {  
  23.                 Intent intent = new Intent(getApplicationContext(),  
  24.                         SecondActivity.class);  
  25.                 startActivity(intent);  
  26.             }  
  27.         });  
  28.     }  
  29.   
  30.     private long exitTime = 0;  
  31.   
  32.     @Override  
  33.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  34.         if (KeyEvent.KEYCODE_BACK == keyCode) {  
  35.             // 判斷是否在兩秒之內連續點擊返回鍵,是則退出,否則不退出  
  36.             if (System.currentTimeMillis() - exitTime > 2000) {  
  37.                 Toast.makeText(getApplicationContext(), "再按一次退出程序",  
  38.                         Toast.LENGTH_SHORT).show();  
  39.                 // 將系統當前的時間賦值給exitTime  
  40.                 exitTime = System.currentTimeMillis();  
  41.             } else {  
  42.                 exitApp();  
  43.             }  
  44.             return true;  
  45.         }  
  46.         return super.onKeyDown(keyCode, event);  
  47.     }  
  48.   
  49.     /** 
  50.      * 退出應用程序的方法,發送退出程序的廣播 
  51.      */  
  52.     private void exitApp() {  
  53.         Intent intent = new Intent();  
  54.         intent.setAction("net.loonggg.exitapp");  
  55.         this.sendBroadcast(intent);  
  56.     }  
  57.   
  58.     @Override  
  59.     protected void onDestroy() {  
  60.         super.onDestroy();  
  61.         System.out.println("-------MainActivity-------->onDestroy()");  
  62.     }  
  63.   
  64. }  
其實不用多說,我相信大家代碼肯定都看懂了,主要是思路,代碼都是非常簡單的基礎的。那下邊我再介紹連續點擊兩次返回鍵退出應用程序的方法,方法如下:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. /** 
  2.      * 記錄標記時間 
  3.      */  
  4.     private long exitTime = 0;  
  5.   
  6.     @Override  
  7.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  8.         if (KeyEvent.KEYCODE_BACK == keyCode) {  
  9.             // 判斷是否在兩秒之內連續點擊返回鍵,是則退出,否則不退出  
  10.             if (System.currentTimeMillis() - exitTime > 2000) {  
  11.                 Toast.makeText(getApplicationContext(), "再按一次退出程序",  
  12.                         Toast.LENGTH_SHORT).show();  
  13.                 // 將系統當前的時間賦值給exitTime  
  14.                 exitTime = System.currentTimeMillis();  
  15.             } else {  
  16.                 exitApp();  
  17.             }  
  18.             return true;  
  19.         }  
  20.         return super.onKeyDown(keyCode, event);  
  21.     }  
到這裏就完了!非常簡單吧!
發佈了0 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章