当前位置: 首页> 财经> 股票 > 广告设计公司宣传海报_品牌设计公司宣传画册_沈阳seo顾问_百度搜索排行榜风云榜

广告设计公司宣传海报_品牌设计公司宣传画册_沈阳seo顾问_百度搜索排行榜风云榜

时间:2025/7/13 13:18:27来源:https://blog.csdn.net/a315823806/article/details/146906200 浏览次数:0次
广告设计公司宣传海报_品牌设计公司宣传画册_沈阳seo顾问_百度搜索排行榜风云榜

android整机测试,需要测试按键。

一般的键好按,好测试。如:音量加+ ,音量- 。

但是,有些按键就不好测了。譬如:电源键(Power),Home键,Menu键,Back键,

以上按键,除了Back可以监听捕捉,其他按键都不好测。

还有特殊按键:F1,F2键。

需要找一个根本的解决方案。

只能从根本上解决这个问题。需要从源码入手。

当进入测试界面的时候,发送一个Intent告诉系统,开始进行按键测试。当离开界面的时候,告诉系统按键测试结束。

具体操作的代码在:

QSSI.13/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

public class PhoneWindowManager implements WindowManagerPolicy {// register for multiuser-relevant broadcastsfilter = new IntentFilter(Intent.ACTION_USER_SWITCHED);
+        filter.addAction(CIT_TEST_ON);
+        filter.addAction(CIT_TEST_OFF);context.registerReceiver(mMultiuserReceiver, filter);mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
@@ -2795,6 +2797,35 @@ public class PhoneWindowManager implements WindowManagerPolicy {+ repeatCount + " keyguardOn=" + keyguardOn + " canceled=" + canceled);}+        if (citTestIn) {
+            switch (keyCode) {
+                case KeyEvent.KEYCODE_HOME:
+                    sendBroadcastIntent(ACTION_HOME);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_MENU:
+                    sendBroadcastIntent(ACTION_MENU);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_POWER:
+                    sendBroadcastIntent(ACTION_POWER);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_BACK:
+                    sendBroadcastIntent(ACTION_BACK);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_KEYF1:
+                    sendBroadcastIntent(ACTION_F1);
+                    if (DEBUG_INPUT) {
+                        Slog.d(TAG, "###########KEYF1###########keyCode: " + keyCode);
+                    }
+                    return key_consumed;
+                case KeyEvent.KEYCODE_KEYF2:
+                    sendBroadcastIntent(ACTION_F2);
+                    if (DEBUG_INPUT) {
+                        Slog.d(TAG, "###########KEYF2###########keyCode: " + keyCode);
+                    }
+                    return key_consumed;
+            }
+        }
+if (mKeyCombinationManager.isKeyConsumed(event)) {return key_consumed;}
@@ -2857,6 +2888,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {// Hijack modified menu keys for debugging featuresfinal int chordBug = KeyEvent.META_SHIFT_ON;+                if (citTestIn) {
+                    sendBroadcastIntent(ACTION_MENU);
+                }if (down && repeatCount == 0) {if (mEnableShiftMenuBugReports && (metaState & chordBug) == chordBug) {Intent intent = new Intent(Intent.ACTION_BUG_REPORT);
@@ -3773,6 +3807,39 @@ public class PhoneWindowManager implements WindowManagerPolicy {final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;boolean isWakeKey = (policyFlags & WindowManagerPolicy.FLAG_WAKE) != 0|| event.isWakeKey();
+        int key_consumed = 0;
+        if (DEBUG_INPUT) {
+            Slog.d(TAG, "######################keyCode: " + keyCode);
+        }
+        if (citTestIn) {
+            switch (keyCode) {
+                case KeyEvent.KEYCODE_HOME:
+                    sendBroadcastIntent(ACTION_HOME);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_MENU:
+                case 187:
+                    sendBroadcastIntent(ACTION_MENU);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_POWER:
+                    sendBroadcastIntent(ACTION_POWER);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_BACK:
+                    sendBroadcastIntent(ACTION_BACK);
+                    return key_consumed;
+                case KeyEvent.KEYCODE_KEYF1:
+                    sendBroadcastIntent(ACTION_F1);
+                    if (DEBUG_INPUT) {
+                        Slog.d(TAG, "###########KEYF1###########keyCode: " + keyCode);
+                    }
+                    return key_consumed;
+                case KeyEvent.KEYCODE_KEYF2:
+                    sendBroadcastIntent(ACTION_F2);
+                    if (DEBUG_INPUT) {
+                        Slog.d(TAG, "###########KEYF2###########keyCode: " + keyCode);
+                    }
+                    return key_consumed;
+            }
+        }if (!mSystemBooted) {// If we have not yet booted, don't let key events do anything.
@@ -4592,6 +4659,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {}}};
+    private boolean citTestIn = false;
+    private String CIT_TEST_ON = "com.aaabbb.citteston";
+    private String CIT_TEST_OFF = "com.aaabbb.cittestoff";
+
+    private String ACTION_HOME = "com.aaabbb.home";
+    private String ACTION_BACK = "com.aaabbb.back";
+    private String ACTION_MENU = "com.aaabbb.menu";
+    private String ACTION_POWER = "com.aaabbb.power";
+    private String ACTION_F1 = "com.aaabbb.f1";
+    private String ACTION_F2 = "com.aaabbb.f2";BroadcastReceiver mMultiuserReceiver = new BroadcastReceiver() {@Override
@@ -4604,10 +4681,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {mSettingsObserver.onChange(false);mDefaultDisplayRotation.onUserSwitch();mWindowManagerFuncs.onUserSwitched();
+            } else if (intent.getAction().equals(CIT_TEST_ON)) {
+                citTestIn = true;
+            } else if (intent.getAction().equals(CIT_TEST_OFF)) {
+                citTestIn = false;}}};+    private void sendBroadcastIntent(String action) {
+        Intent intent = new Intent(action);
+        mContext.sendBroadcast(intent);
+    }
+// Called on the PowerManager's Notifier thread.@Overridepublic void startedGoingToSleep(@PowerManager.GoToSleepReason int pmSleepReason) {

测试App需要注册一个BroadcastReceiver ,来处理接受到的按键广播。

PhoneWindowManager 要2个地方都要修改,才能覆盖所有的按键要求。menu处理起来复杂些。

关键字:广告设计公司宣传海报_品牌设计公司宣传画册_沈阳seo顾问_百度搜索排行榜风云榜

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: