1. 程式人生 > >Android 長按和短按POWER KEY 按鍵觸發

Android 長按和短按POWER KEY 按鍵觸發

功能需求短按實現彈出:重啟或者關機對話方塊

                長按直接關機:

1.短按:

    <integer name="config_shortPressOnPowerBehavior">1</integer>

    <!-- Control the behavior when the user double presses the power button.
            0 - Nothing
            1 - Toggle theater mode setting
            2 - Brightness boost
    -->
2.長按:

    <!-- Control the behavior when the user long presses the power button.
            0 - Nothing
            1 - Global actions menu
            2 - Power off (with confirmation)
            3 - Power off (without confirmation)
    -->
    <integer name="config_longPressOnPowerBehavior">1</integer>

------------------------------------------------------------------------------------------------------------------------------------------------

短按

     mShortPressOnPowerBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_shortPressOnPowerBehavior);
 長按

      mLongPressOnPowerBehavior = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_longPressOnPowerBehavior);
 

            switch (mShortPressOnPowerBehavior) {
                case SHORT_PRESS_POWER_NOTHING:
                    break;
                case SHORT_PRESS_POWER_GO_TO_SLEEP:
                    mPowerManager.goToSleep(eventTime,
                            PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON, 0);
                    break;
                case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP:
                    mPowerManager.goToSleep(eventTime,
                            PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON,
                            PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
                    break;
                case SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME:
                    mPowerManager.goToSleep(eventTime,
                            PowerManager.GO_TO_SLEEP_REASON_POWER_BUTTON,
                            PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
                    launchHomeFromHotKey();
                    break;
                case SHORT_PRESS_POWER_GO_HOME:
                    launchHomeFromHotKey(true /* awakenFromDreams */, false /*respectKeyguard*/);
                    break;
            }
 

        if (!mPowerKeyHandled) {
            if (interactive) {
                // When interactive, we're already awake.
                // Wait for a long press or for the button to be released to decide what to do.
                if ((hasLongPressOnPowerBehavior() && !SystemProperties.getBoolean("ro.platform.has.tvuimode", false) ) ||(whichPowerKeyDefinition() == POWER_KEY_SHUTDOWN)) {
                    Message msg = mHandler.obtainMessage(MSG_POWER_LONG_PRESS);
                    msg.setAsynchronous(true);
//          if(SystemProperties.getBoolean("ro.LongPowerkey.Defined", false))
//          {
//          Log.d(TAG,"11111 is powerkeyshutdowndefiniton");
//          mHandler.sendMessageDelayed(msg, 3000);
//          }
//          else
//          {
                    mHandler.sendMessageDelayed(msg,
                            ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());
//          }
                }
            } else {
                wakeUpFromPowerKey(event.getDownTime());

                if (mSupportLongPressPowerWhenNonInteractive && hasLongPressOnPowerBehavior()) {
                    Message msg = mHandler.obtainMessage(MSG_POWER_LONG_PRESS);
                    msg.setAsynchronous(true);
                    mHandler.sendMessageDelayed(msg,
                            ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());
                    mBeganFromNonInteractive = true;
                } else {
                    final int maxCount = getMaxMultiPressPowerCount();

                    if (maxCount <= 1) {
                        mPowerKeyHandled = true;
                    } else {
                        mBeganFromNonInteractive = true;
                    }
                }
            }
        }
-------------------------------------------------------------------------------------------------------------------------------------------

    private static final String POWER_KEY_DEFINITION = "power_key_definition";
    static final int POWER_KEY_SUSPEND = 0;
    static final int POWER_KEY_SHUTDOWN = 1;
    static final int POWER_KEY_RESTART = 2;

    private int whichPowerKeyDefinition() {
        int default_value = 0;
//        if (SystemProperties.getBoolean("ro.platform.has.tvuimode", false)) {
    if (SystemProperties.getBoolean("ro.platform.has.tvuimode", false)|| SystemProperties.getBoolean("ro.platform.has.down_power", false)) {
            default_value = 1;
        }
        return Settings.System.getInt(mContext.getContentResolver(), POWER_KEY_DEFINITION, default_value);
    }
--------------------------------------------------------------------------------------------------------------------------------------

        int definedPowerKey = whichPowerKeyDefinition();
        if (definedPowerKey == POWER_KEY_SHUTDOWN) {
            mPowerManager.shutdown(false,"userrequested",false);  //我們要修改的地方
            return;
        }
 

    private void powerLongPress() {
        final int behavior = getResolvedLongPressOnPowerBehavior();
        switch (behavior) {
        case LONG_PRESS_POWER_NOTHING:
            break;
        case LONG_PRESS_POWER_GLOBAL_ACTIONS:    //我們要修改的地方
            mPowerKeyHandled = true;
            if (!performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false)) {
                performAuditoryFeedbackForAccessibilityIfNeed();
            }
            showGlobalActionsInternal();
            break;
        case LONG_PRESS_POWER_SHUT_OFF:
        case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:
            mPowerKeyHandled = true;
            performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
            sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
            mWindowManagerFuncs.shutdown(behavior == LONG_PRESS_POWER_SHUT_OFF);
            break;
        }
    }
 

相關推薦

Android POWER KEY 按鍵觸發

功能需求短按實現彈出:重啟或者關機對話方塊                 長按直接關機: 1.短按:     <integer name="config_shortPressOnPowerBehavior">1</integer>     &

Android 電源鍵電源鍵的詳細處理流程

1 Android  Android4.x在Framework的PhoneWindowManager對Power(KeyEvent.KEYCODE_POWER)和Home(KeyEvent.KEYCODE_HOME)鍵做了處理,不會把這些鍵傳送上層應用程式。如需要把這些鍵

Android 按鍵識別

在Android中已經有了長按與短按的識別,只是長按識別的時間比較短 ,大概在1s以上就認為是長按了。主要的思路是設定一個標誌位,利用事件相應次數函式event.getRepeatCount()來設定標誌位。主要用的函式是按鍵響應的三個函式 onKeyLongPress,o

【CC2530強化實訓02】普通延時函數實現按鍵

掃描 -- 技術 unsigned int 切換 pan code count 【CC2530強化實訓02】普通延時函數實現按鍵的長按與短按 【題目要求】 用一個按鍵實現單擊與雙擊的功能已經是很多嵌入式產品的常用手法。使用定時器的間隔定時來計算按鍵按下的時間是通用

【CC2530強化實訓03】定時器間隔定時實現按鍵

【題目要求】       雖然用普通的延時函式能夠實現按鍵長按與短按的判別,但是在實際的工程應用和專案開發中並不好用也不靈活。更多得是藉助定時器的間隔定時來計算按鍵從按下到鬆開的時間間隔,然後通過判斷該時間值來區分按鍵長按與短按的狀態。       在新大陸國賽裝置的黑色

通過DGUS觸控式螢幕實現按鍵啟動不同功能的效果

DGUS中有一個功能,可能用的人不多,所以不太瞭解,叫“觸控式螢幕按壓狀態返回”。這個控制元件也是一個觸控控制元件,配合頁面上的按鈕來實現觸控功能。“觸控式螢幕按壓狀態返回”與普通的“基本觸控”的主要區別在於,它除了可以實現基本觸控的功能(按鍵效果,頁面切換)外,還可以判斷觸

stm32軟體觸發按鍵區分

/* ------------------------------------------------------------------------------------------------  * @fn          KeyCoolPressTimeHandle

基礎知識概念(1):Socket 連線連線的概念

1.短連線 連線->傳輸資料->關閉連線     HTTP是無狀態的,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,但任務結束後就中斷連線。短連線是指SOCKET建立連線後 ,傳送後或接收完資料後,就馬上斷開連線。 2.長連線

什麼是連線連線(不看後悔,一看必懂)

在日常專案中,大多的時候我們用的是短連線,一個請求過來,一個執行緒處理完該請求,執行緒被執行緒池回收,這個請求就關閉了.雖然這能滿足很大部分的需求,但是也有些問題,比如說:如果客戶端發的請求比較多,比較頻繁,服務端就會忙於建立連線處理請求,由於服務端的執行緒數也有限,併發比較大的話有可能會造成服

連線連線區別優缺點

TCP與UDP  udp:面向無連線的通訊協議,資料包括目的埠資訊和源埠資訊 優點:面向無連線,操作簡單,要求系統資源較少,速度快,由於不需要連線,可進行廣播發送 缺點:傳送資料之前不需要與對方建立連線,接收到資料時也不需要傳送確認訊號,傳送端不知道接收端是否正確接接收,不會重

tcp的連線連線

tcp長連線和短連線 TCP在真正的讀寫操作之前,server與client之間必須建立一個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立通過三次握手,釋放則需要四次握手,所以說每個連線的建立都是需要資源消耗和時間消耗的。 TCP通訊的整個過程,如下圖: 1. TCP

httpTcp的連線連線

轉自:https://www.cnblogs.com/fubaizhaizhuren/p/7523374.html http協議和tcp/ip 協議的關係 (1) http是應用層協議,tcp協議是傳輸層協議,ip協議是網路協議。 (2) IP協議主要解決網路路由和定址問題 (3)

Socket連線連線的區別

TCP/IP TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。 在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。 在應用層有:TCP包括FTP、HTTP、TELNET、SMTP等協議 UDP包括DNS

TCP(HTTP)連線連線區別怎樣維護連線

一、HTTP協議和TCP協議 HTTP的長連線和短連線本質上是TCP長連線和短連線。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。IP協議主要解決網路路由和定址問題,TCP協議

HTTP連線連線

1. HTTP協議與TCP/IP協議的關係   HTTP的長連線和短連線本質上是TCP長連線和短連線。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。IP協議主要解決網路路由和定址問題,TCP協議主要解決如何在IP層之上可靠的傳遞資料包,使在網路上的另一端收到發端發出的所有包,並且順序

HTTP 連線連線

1. HTTP協議與TCP/IP協議的關係 HTTP的長連線和短連線本質上是TCP長連線和短連線。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。IP協議主要解決網路路由和定址問題,TCP協議主要解決如何在IP層之上可靠的傳遞資料包,使在網路上

HTTP的連線連線

  本文總結&分享網路程式設計中涉及的長連線、短連線概念。     關鍵字:Keep-Alive,併發連線數限制,TCP,HTTP 一、什麼是長連線      HTTP1.1規定了預設保持長連線(HTTP persistent connection ,也

談談HTTP協議中的輪詢、輪詢、連線連線

---------------------  作者:左瀟龍  來源:CSDN  原文:https://blog.csdn.net/zuoxiaolong8810/article/details/65441709  版權宣告:本文為博主原創文章,轉載請附上博文連結!

連線 、連線、心跳機制與斷線重連(轉載) Socket的連線連線

概述 可承遇到,不知什麼原因,一個夜晚,機房中,大片的遠端呼叫連線斷開。 第二天早上,使用者訪問高峰,大部分伺服器都在獲取連線,造成大片網路阻塞。 服務崩潰,慘不忍睹的景象。 本文將從長連線和短連線的概念切入,再到長連線與短連線的區別,以及應用場景,引出心跳機制和斷線重連,給出程式碼實現。 從原

TCP連結連結

tcp長連線和短連線 TCP在真正的讀寫操作之前,server與client之間必須建立一個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立通過三次握手,釋放則需要四次握手,所以說每個連線的建立都是需要資源消耗和時間消耗的。 TCP通訊的整個過程,如下圖: