<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
裝置有一個按鍵,我們定義為了 KEYCODE_DPAD_CENTER(23),長按 5s,實現系統自動重啟。
在 Framework 層,查詢長按電源鍵關機相關邏輯,可以看到按鍵經過一堆處理之後會來到 (/frameworks/base/services/core/java/com/android/server/policy/)PhoneWindowManager.java 定義的 interceptKeyBeforeQueueing函數中,這裡還需注意另一個函數為 interceptKeyBeforeDispatching,注意區別。在按鍵按下時延時5s傳送特定訊息,在收到訊息時實現功能,在按鍵擡起時復原延時傳送的訊息。下面直接說具體做法。
首先定義一個屬於自己的訊息,可以看到,在 PhoneWindowManager.java 第820行附近,定義了一堆 private static final int MSG_XXXX = XX;
,我們需要在最後這裡新增一個自己的 private static final int MSG_MY_REBOOT = 999;
定義為999是為了避免與現有值重複。 接下來,在 handleMessage
方法中,新增該訊息的處理:
private class PolicyHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_ENABLE_POINTER_LOCATION: enablePointerLocation(); break; // Add start case MSG_MY_REBOOT: mWindowManagerFuncs.reboot(false); break; // Add end ... // 省略若干行 } } }
這裡直接呼叫了 mWindowManagerFuncs
的 reboot
方法,傳 false
進去,表現為不彈窗直接進入重啟過程,顯示“系統重啟中”頁面。傳 true
進去,則彈窗提示將要關機,點是關機重啟、點否取消。
首先定義兩個函數,分別進行 KeyDown 和 KeyUp 時的處理。這兩個函數要寫在 PhoneWindowManager 類中,注意不要寫進了它的內部類裡面,其實原始碼中包含很多類似的 interceptXxxKeyDown
方法,寫到與他們並列的位置即可。
// ..... // Add start private void interceptCenterKeyDown() { Message msg = mHandler.obtainMessage(MSG_MY_REBOOT); msg.setAsynchronous(true); mHandler.sendMessageDelay(msg, 5000); // 5000ms = 5seconds } private void interceptCenterKeyUp() { mHandler.removeMessages(MSG_MY_REBOOT); } // Add end private void interceptPowerKeyDown(KeyEvent event, boolean interactive) { // 省略若干行
最後,在 interceptKeyBeforeQueueing
中新增對按鍵的攔截及處理呼叫
@Override public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) { if (!mSystemBooted) { // If we have not yet booted, don't let key events do anything return 0; } final boolean interactive = (policyFlags & FLAG_INTERACTIVE) != 0; // 省略若干行 switch (keyCode) { case KeyEvent.KEYCODE_BACK: { if (down) { interceptBackKeyDown(); } else { boolean handled = interceptBackKeyUp(event); // Don't pass back press to app if we've already handled it via long press if (handled) { result &= ~ACTION_PASS_TO_USER; } } break; } // Add start case KeyEvent.KEYCODE_DPAD_CENTER: { if (down) { interceptCenterKeyDown(); } else { interceptCenterKeyUp(); } break; } // Add end case KeyEvent.KEYCODE_VOLUME_DOWN: case KeyEvent.KEYCODE_VOLUME_UP: // 省略若干行 } }
這裡,因為在一般情況下,我們需要把這個按鍵訊息傳送給應用層,因此這裡我們不進行 result &= ~ACTION_PASS_TO_USER
的操作。
這樣,整個長按重啟功能就實現了。
更多關於Android CENTER鍵長按功能的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45