首页 > 系统 > Android > 正文

Android监听Home键和Back键的区别介绍

2019-10-24 21:12:38
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Android监听Home键和Back键的区别介绍,本文还同时给出了Home键监听的实现代码,需要的朋友可以参考下

一: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键监听封装类:

 

 
  1. package com.scd.homewatcher.util; 
  2.  
  3. import android.content.BroadcastReceiver; 
  4. import android.content.Context; 
  5. import android.content.Intent; 
  6. import android.content.IntentFilter; 
  7. import android.util.Log; 
  8.  
  9. /** 
  10. * Home键监听封装 
  11.  
  12. * @author way 
  13.  
  14. */ 
  15. public class HomeWatcher { 
  16.  
  17. // 回调接口 
  18. public interface OnHomePressedListener { 
  19.  
  20. public void onHomePressed(); 
  21.  
  22. public void onHomeLongPressed(); 
  23.  
  24. private static final String TAG = "HomeWatcher"
  25. /** 上下文 */ 
  26. private Context mContext; 
  27. /** 过滤器 */ 
  28. private IntentFilter mFilter; 
  29. /** 接口 */ 
  30. private OnHomePressedListener mListener; 
  31. /** 广播接收者 */ 
  32. private InnerRecevier mRecevier; 
  33.  
  34. public HomeWatcher(Context context) { 
  35. mContext = context; 
  36. mRecevier = new InnerRecevier(); 
  37. mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
  38.  
  39. /** 
  40. * 设置监听 
  41.  
  42. * @param listener 
  43. */ 
  44. public void setOnHomePressedListener(OnHomePressedListener listener) { 
  45. mListener = listener; 
  46.  
  47. /** 
  48. * 开始监听,注册广播 
  49. */ 
  50. public void startWatch() { 
  51. if (mRecevier != null) { 
  52. mContext.registerReceiver(mRecevier, mFilter); 
  53.  
  54. /** 
  55. * 停止监听,注销广播 
  56. */ 
  57. public void stopWatch() { 
  58. if (mRecevier != null) { 
  59. mContext.unregisterReceiver(mRecevier); 
  60.  
  61. /** 
  62. * 广播接收者 
  63. */ 
  64. private class InnerRecevier extends BroadcastReceiver { 
  65. final String SYSTEM_DIALOG_REASON_KEY = "reason"
  66. final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"
  67. final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps"
  68. final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"
  69.  
  70. @Override 
  71. public void onReceive(Context context, Intent intent) { 
  72. String action = intent.getAction(); 
  73. if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { 
  74. String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY); 
  75. if (reason != null) { 
  76. Log.i(TAG, "action:" + action + ",reason:" + reason); 
  77. if (mListener != null) { 
  78. if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) { 
  79. // 短按home键 
  80. mListener.onHomePressed(); 
  81. else if (reason 
  82. .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) { 
  83. // 长按home键 
  84. mListener.onHomeLongPressed(); 

(2).MainActivity类:

 

 
  1. package com.scd.homewatcher; 
  2.  
  3. import android.app.Activity; 
  4. import android.os.Bundle; 
  5. import android.view.KeyEvent; 
  6. import android.widget.Toast; 
  7.  
  8. import com.scd.homewatcher.util.HomeWatcher; 
  9. import com.scd.homewatcher.util.HomeWatcher.OnHomePressedListener; 
  10.  
  11. public class MainActivity extends Activity implements OnHomePressedListener { 
  12. private HomeWatcher mHomeWatcher; 
  13.  
  14. @Override 
  15. protected void onCreate(Bundle savedInstanceState) { 
  16. super.onCreate(savedInstanceState); 
  17. setContentView(R.layout.activity_main); 
  18.  
  19.  
  20. @Override 
  21. protected void onResume() { 
  22. mHomeWatcher = new HomeWatcher(this); 
  23. mHomeWatcher.setOnHomePressedListener(this); 
  24. // 注册广播 
  25. mHomeWatcher.startWatch(); 
  26. super.onResume(); 
  27.  
  28. @Override 
  29. protected void onPause() { 
  30. mHomeWatcher.setOnHomePressedListener(null); 
  31. // 注销广播 
  32. mHomeWatcher.stopWatch(); 
  33. super.onPause(); 
  34.  
  35. @Override 
  36. public void onHomePressed() { 
  37. // TODO 
  38. Toast.makeText(this"短按Home键,实现自己的逻辑", Toast.LENGTH_SHORT).show(); 
  39.  
  40.  
  41. @Override 
  42. public void onHomeLongPressed() { 
  43. // TODO 
  44. Toast.makeText(this"长按Home键,实现自己的逻辑", Toast.LENGTH_SHORT).show(); 
  45.  
  46.  
  47. @Override 
  48. public boolean onKeyDown(int keyCode, KeyEvent event) { 
  49. if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
  50. System.out.println("按下了back键 onKeyDown()"); 
  51. return false
  52. else { 
  53. return super.onKeyDown(keyCode, event); 
  54.  
  55.  
  56. @Override 
  57. public void onBackPressed() { 
  58. // super.onBackPressed()会自动调用finish()方法,关闭 
  59. super.onBackPressed(); 
  60.  

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表