国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android監聽Home鍵和Back鍵的區別介紹

2020-04-11 11:31:36
字體:
來源:轉載
供稿:網友

一:Android 中Home鍵監聽和Back鍵監聽的區別:

(1).在Android中,當按下Home鍵的時候,默認情況下Stop前臺的Activity,即Activity設置成停止狀態【onStop()】,而不是銷毀狀態【onDestory()】。如果再次啟動該Activity,不是調用onCreate()方法,而是調用onSavedInstanceState方法。則是從onRestart()開始-onStart()-onResume()。
(2).當按下back鍵則不同,back鍵默認finish前臺的activity,即activity的狀態為onDestory為止,再次啟動該activity則從onCreate開始,不會調用onSavedInstanceState方法。
總而言之:按下Home鍵會返回桌面,而back則會返回前一個activity。

在這里Back鍵的實現方法就不贅述了,主要講解一下Home鍵的實現方式吧。以下是我找的參考資料自己思考的。請大家給出建議。
Home鍵監聽的實現方法:
(1).在onResum里面注冊廣播,OnPause里面注銷廣播。
(2).在廣播中攔截Intent.ACTION_CLOSE_SYSTEM_DIALOGS 這個Action ,通過獲取Reason字段 來判斷長按 還是單擊Home鍵。
代碼如下:

(1).Home鍵監聽封裝類:

package com.scd.homewatcher.util;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.util.Log;/** * Home鍵監聽封裝 *  * @author way *  */public class HomeWatcher {  // 回調接口  public interface OnHomePressedListener {    public void onHomePressed();    public void onHomeLongPressed();  }  private static final String TAG = "HomeWatcher";  /** 上下文 */  private Context mContext;  /** 過濾器 */  private IntentFilter mFilter;  /** 接口 */  private OnHomePressedListener mListener;  /** 廣播接收者 */  private InnerRecevier mRecevier;  public HomeWatcher(Context context) {    mContext = context;    mRecevier = new InnerRecevier();    mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);  }  /**   * 設置監聽   *    * @param listener   */  public void setOnHomePressedListener(OnHomePressedListener listener) {    mListener = listener;  }  /**   * 開始監聽,注冊廣播   */  public void startWatch() {    if (mRecevier != null) {      mContext.registerReceiver(mRecevier, mFilter);    }  }  /**   * 停止監聽,注銷廣播   */  public void stopWatch() {    if (mRecevier != null) {      mContext.unregisterReceiver(mRecevier);    }  }  /**   * 廣播接收者   */  private class InnerRecevier extends BroadcastReceiver {    final String SYSTEM_DIALOG_REASON_KEY = "reason";    final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";    final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";    final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";    @Override    public void onReceive(Context context, Intent intent) {      String action = intent.getAction();      if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {        String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);        if (reason != null) {          Log.i(TAG, "action:" + action + ",reason:" + reason);          if (mListener != null) {            if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {              // 短按home鍵              mListener.onHomePressed();            } else if (reason                .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {              // 長按home鍵              mListener.onHomeLongPressed();            }          }        }      }    }  }}

(2).MainActivity類:

package com.scd.homewatcher;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.widget.Toast;import com.scd.homewatcher.util.HomeWatcher;import com.scd.homewatcher.util.HomeWatcher.OnHomePressedListener;public class MainActivity extends Activity implements OnHomePressedListener {  private HomeWatcher mHomeWatcher;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);  }  @Override  protected void onResume() {    mHomeWatcher = new HomeWatcher(this);    mHomeWatcher.setOnHomePressedListener(this);    // 注冊廣播    mHomeWatcher.startWatch();    super.onResume();  }  @Override  protected void onPause() {    mHomeWatcher.setOnHomePressedListener(null);    // 注銷廣播    mHomeWatcher.stopWatch();    super.onPause();  }  @Override  public void onHomePressed() {    // TODO    Toast.makeText(this, "短按Home鍵,實現自己的邏輯", Toast.LENGTH_SHORT).show();  }  @Override  public void onHomeLongPressed() {    // TODO    Toast.makeText(this, "長按Home鍵,實現自己的邏輯", Toast.LENGTH_SHORT).show();  }  @Override  public boolean onKeyDown(int keyCode, KeyEvent event) {    if ((keyCode == KeyEvent.KEYCODE_BACK)) {      System.out.println("按下了back鍵 onKeyDown()");      return false;    } else {      return super.onKeyDown(keyCode, event);    }  }  @Override  public void onBackPressed() {    // super.onBackPressed()會自動調用finish()方法,關閉    super.onBackPressed();  }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰台区| 淅川县| 左贡县| 贞丰县| 河间市| 南通市| 获嘉县| 绍兴县| 丽江市| 凉城县| 扬中市| 瓮安县| 平定县| 突泉县| 台湾省| 大同县| 额尔古纳市| 新沂市| 通榆县| 白朗县| 济阳县| 白河县| 子洲县| 江门市| 固镇县| 汝阳县| 古蔺县| 孙吴县| 东源县| 海原县| 绥阳县| 大同县| 新和县| 宜宾市| 上林县| 兴山县| 田阳县| 四子王旗| 法库县| 宁蒗| 潜江市|