关机的时候会走power的相关部分

首先我们监听power键的文件是在frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

监听的函数是interceptKeyBeforeQueueing()

这个也是监听我们keyevent其他按键拦截的位置。

我们知道按键按下的时候有down事件和up事件

final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;

我们在上面先声明一个down的事件,避免我们需要的功能执行两次。

首先我们使用private int powernum = 0;来记录次数,下面给出解释。

if((keyCode==KeyEvent.KEYCODE_POWER)&&(down==true)){

powernum = powernum + 1;

Message message=new Message();

if(SystemProperties.getBoolean("mstar.powertwo.enable",false)){

message.what = powernum;

} else {

message.what = 1;

}

powerhandler.sendMessage(message);

return 0;

}

if(SystemProperties.getBoolean("mstar.powertwo.enable",false)){

if(ShutdownThread.powercencle()){

if((keyCode != KeyEvent.KEYCODE_POWER) && (down == true)){

ShutdownThread.powerdialog();

powernum = 0;

}

}

}

我这里有两种不同样式的关机的弹出框。

第一种是普通的dialog的引用,需要按确定键来关机

第二种是两次power键进行关机,按任意键取消dialog

按一下power我们对powernum进行一次记录。

SystemProperties.getBoolean("mstar.powertwo.enable",false))类似于一个属性

当它为真的时候,就是两次power键关机。否的时候就是按一下power

为了方便发送按两次关机走不同的函数,我通过发送message的值来进行区分。

private Handler powerhandler = new Handler(){

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

mWindowManagerFuncs.shutdown(true);

powernum = 1;

break;

case 2:

mWindowManagerFuncs.shutdown(false);

break;

default:

break;

}

};

};

这里发送message.what=1;的时候会执行mWindowManagerFuncs.shutdown(true);

当发送message.what=2;  会执行mWindowManagerFuncs.shutdown(false);

这里shutdown()的函数就是我们的关机弹出框。

messgae.what=1的时候,我们显示这个dialog。

dialog在我们的ShutdownThread.java类里面

shutdown()的函数的文件位置:

frameworks\base\services\core\java\com\android\server\power\ShutdownThread.java

下面的截图是跟着上面的代码,这里顺便把framework层的获取string的int值也将一下。

context.getResources().getInteger()

使用这个可以获取framework的string。因为我按两次关机的时候问题提示的信息不同,所以需要在framework添加新的string文字。

我这里添加的两个类在

frameworks\base\core\res\res\values\symbols.xml

frameworks\base\core\res\res\values\strings.xml

因为不需要添加id所以只需要添加这两个地方,可以参考里面其他string的写法。

因为我还不会使用代码的应用,┭┮﹏┭┮  只能这样子去截图,读者辛苦一下吧。

这个部分的代码可以在源码中找到,源码是最好的老师

这个部分是区分dialog的地方,其实还有更好的解决方法的,我这里使用的最快的方法。

这里有个重点就是把dialog设置成全局dialog,不然会报错

sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);

这个上面这个是必须要的,不要就会报错。

之后我写了连个回调方法来进行区分,如果是需要按两次power进行关机的时候,当dialog是显示的时候powercencle=true   默认为false。然后在PhoneWindowManager.java那边就行判断,然后在调用powerdialog的这个方法来把dialog进行取消。

这里我还对dialog进行了一个优化,把dialog的高为默认的,但是它的宽,我自己得到了屏幕的宽度然后在除以的2。这个部分的代码可以如果不需要可以去删除。

总结:power的弹出框

相当于发送一个消息来进行显示dialog,然后在按确定的时候走关机的函数。

两次power键关机,相当于记录power键的次数。当为2的时候就走关机的流程。

android tv 悬浮窗口,android TV的自定义关机弹出框相关推荐

  1. android的底部弹出框炫酷的样式,Android自定义底部弹出框ButtomDialog

    本文实例为大家分享了Android自定义底部弹出框的具体代码,供大家参考,具体内容如下 先看看效果和你要的是否一样 一 .先来配置自定义控件需要的资源 1.在res文件夹下创建一个anim文件夹并创建 ...

  2. html自定义js程序,JS中微信小程序自定义底部弹出框

    实现微信小程序底部弹出框效果,代码分为html,css和js两部分,具体代码详情大家参考下本文. html CSS .commodity_screen { width: 100%; height: 1 ...

  3. Android自定义退出弹出框

    在应用中不是很常见自定义的退出弹出框,游戏中我们经常能看到.下面就看下是怎么实现的,首先我们定义一个方法,当用户点击退出的时候调用这个方法. 1 private void dialog() { 2 f ...

  4. Android开发:利用Activity的Dialog风格完成弹出框设计

    转:http://www.linuxidc.com/Linux/2011-08/41933.htm 在我们使用Dialog时,如果需要用到很多自己设计的控件,虽然可以让弹出框显示出我们需要的界面,但却 ...

  5. 如何在腾讯地图上设置多种颜色的点位和自定义背景弹出框

    1.引入地图js <script >var now = new Date();var number = now.getYear().toString() + now.getMonth(). ...

  6. 自定义 cube-ui 弹出框dialog支持多个且多种类型的input框

    start 最近遇到一个需求,给一个移动端项目加一点小功能. 移动端 UI 组件库使用的是 cube-ui. 但是基础的 cube-ui 不太满足我的需求- 重点是记录一下我的思路,其次才是实现的代码 ...

  7. android 输入法 悬浮窗口,Android EditText悬浮在输入法之上

    Android EditText悬浮在输入法之上 使用 android:windowSoftInputMode="adjustResize" 会让界面整体被顶上去,很多时候我们不需 ...

  8. android 360 悬浮窗口,Android实现类似360,QQ管家那样的悬浮窗

    一.前言: 我手机从来不装这些东西,不过,有次看到同事的android手机上,有个QQ管家在桌面上浮着,同事拖动管家时,管家就变成一只鸟,桌面下方还有个弹弓,桌面顶部有只乌鸦,把管家也就是鸟拖动到弹弓 ...

  9. android 的悬浮窗口,Android 之 悬浮窗口

    1. 创建并设置  WindowManager  类 WindowManager mWindowManager; // 取得系统窗体 mWindowManager = (WindowManager) ...

最新文章

  1. 总线控制内部eep_【上周回顾】小白如何自学单片机;电子专业的十个神总结;摩尔定律54年;电子工程师常弄混的总线分类汇总;他做成了半导体害怕他做的事...
  2. 腾讯AI Lab视觉计算中心招聘计算机视觉算法实习生
  3. 自律到极致-人生才精致「第5期」:领奖通知
  4. [ARM-assembly]-ARM向量浮点指令集 快速参考卡
  5. 机器学习-分类算法-朴素贝叶斯算法07
  6. Deep-Learning-with-Python] 文本序列中的深度学习
  7. 分布式事务是啥?常用的解决方案有哪些?
  8. 软件定义存储的系统架构图和关键技术
  9. 日历php 价格 库存,jQuery web 组件 后台日历价格、库存设置的代码
  10. MyEclipse使用经验归纳
  11. [USACO08NOV]奶牛混合起来Mixed Up Cows
  12. RQNOJ 342 最不听话的机器人:网格dp
  13. 计算机组成原理学习-哈工大《计算机组成原理》第二章
  14. win10字体安装_Win10操作系统下字体的安装教程(非常详细,适合新手DIY)
  15. 易语言excel内容查找助手
  16. 安徽师范大学计算机学院在哪个校区,2021年安徽师范大学有几个校区,大一新生在哪个校区...
  17. 什么是汽车SOA架构?【长期更新】【800字】【原创】
  18. 电脑怎么连接隐藏的无线WiFi ?
  19. 相亲APP开发功能及解决方案
  20. 数据库sql文件导入失败(高版本转入低版本),报错:[SQL] Query test start[ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘

热门文章

  1. 微信小程序组件化 快速实现可用模态窗
  2. [译]ASP.NET Core 2.0 机密配置项
  3. Matlab 二维绘图函数(plot类)
  4. 【最小树形图(奇怪的kruskal)】【SCOI 2012】【bzoj 2753】滑雪与时间胶囊
  5. ASP.NET Core 中文文档 第二章 指南(4.5)使用 SQL Server LocalDB
  6. 字节码中的两个方法init,clinit
  7. mysqlimport
  8. 一个 Linux 上分析死锁的简单方法
  9. mysql双向复制(主主模式)
  10. Hadoop的安装与配置及示例程序wordcount的运行