日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/5/22 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android tv 悬浮窗口,android TV的自定义关机弹出框 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關機的時候會走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的自定义关机弹出框的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。