当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发实现长按返回键弹出关机框功能

Android开发实现长按返回键弹出关机框功能

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了android开发实现长按返回键弹出关机框功能。分享给大家供大家参考,具体如下:

今天刚好在phonewindowmanager.java下看,当看到长按home键的功能时,突然想到是不是可以长按back键来弹出关机框。

有想法就试试呗。当然想法是根据长按home键来的,那么我们应该可以模仿长按home键来做。经过一番实验,貌似好像可以,拿出来给大家分享一下!!!

先找到phonewindowmanager.java文件,在framework/base/policy/src/com/....下,在里面我们能找到关机框showglobalactionsdialog() (长按power),最近浏览应用程序showrecentappsdialog() (长按home),那么我们就模仿长按home来调用关机框showglobalactionsdialog()

我们能找到runnable mpowerlongpress = new runnable()mhomelongpress = new runnable(),因此我们也要创建一个长按back键的线程

/*****************************************************/
//add by xxnan
runnable mbacklongpress = new runnable() {
  public void run() {
   mbackpressed = false;
    performhapticfeedbacklw(null, hapticfeedbackconstants.long_press, false);
    sendclosesystemwindows(system_dialog_reason_global_actions);
    showglobalactionsdialog();
  }
 };
/*****************************************************/

里面的新增mbackpressed,当然你要在开始定义一下boolean型的mbackpressed,而

performhapticfeedbacklw(null, hapticfeedbackconstants.long_press, false);
sendclosesystemwindows(system_dialog_reason_global_actions);

两句则是用mpowerlongpress的,最后就是显示关机框了showglobalactionsdialog()

而在interceptkeybeforedispatching()中我们也要做相应的增加:

/*****************************************************/
  //add by xxnan
  if ((keycode == keyevent.keycode_back) && !down) {
   mhandler.removecallbacks(mbacklongpress);//应该是取消长按
  }
  if (mbackpressed) {
  if (keycode == keyevent.keycode_back)
   {
    if (!down) {
     mbackpressed = false;
    }
   }
  }
  if ((keycode == keyevent.keycode_back))
  {
     if (down && repeatcount != 0) {//如果按下back键而且repeatcount不等于0,(只按一下back键repeatcount的值为0,长按repeatcount的值就会随时间的增加而增加,而且当长按back键repeatcount>10才会弹出关机框)
      if (!keyguardon) {//不管长按还是短按keyguardon都等于false
      log.i("longpressback","longpressback");
      mhandler.postdelayed(mbacklongpress, viewconfiguration.getglobalactionkeytimeout());//调用长按back的线程mbacklongpress
      }
      mbackpressed = true;
    }
  }
  /*****************************************************/

剩下的就是编译一下framework/base下的policy。。。将生成的system/framework/android.policy.jar替换手机里的就可以了重新启动就ok了!!!附图一张

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网