欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Android设置个性化按钮按键的快捷启动应用

Android设置个性化按钮按键的快捷启动应用

2025/2/12 17:36:56 来源:https://blog.csdn.net/a315823806/article/details/145491005  浏览:    关键词:Android设置个性化按钮按键的快捷启动应用

设备上硬件按键。除了 Home ,Menu,Back ,按键。

还有其他按键。

如:

F1 按键 ,F2按键。

监听F1,和F2的按键。

可以在以下文件查看,记录对应的KeyCode

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

代码如下:

 @Overridepublic long interceptKeyBeforeDispatching(IBinder focusedToken, KeyEvent event,int policyFlags) {final boolean keyguardOn = keyguardOn();final int keyCode = event.getKeyCode();final int repeatCount = event.getRepeatCount();final int metaState = event.getMetaState();final int flags = event.getFlags();final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;final boolean canceled = event.isCanceled();final int displayId = event.getDisplayId();final long key_consumed = -1;final long key_not_consumed = 0;if (DEBUG_INPUT) {Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="+ repeatCount + " keyguardOn=" + keyguardOn + " canceled=" + canceled);}if (mKeyCombinationManager.isKeyConsumed(event)) {return key_consumed;}
.
.
.if (keyCode == 312) {// F2String value = getFunctoinSetting(F2_FUNCTION_KEY);String packagename = "org.codeaurora.snapcam";String mainClass = "com.android.camera.CameraLauncher";if (TextUtils.isEmpty(value)) {} else {String[] pls = value.split("-");packagename = pls[1];mainClass = pls[2];}Intent intent = new Intent();ComponentName launcher = new ComponentName(packagename, mainClass);intent.setComponent(launcher);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);mContext.startActivity(intent);return key_consumed;} else if (keyCode == 311) {// F1String value = getFunctoinSetting(F1_FUNCTION_KEY);String packagename = "com.android.chrome";String mainClass = "com.google.android.apps.chrome.Main";if (TextUtils.isEmpty(value)) {} else {String[] pls = value.split("-");packagename = pls[1];mainClass = pls[2];}Intent intent = new Intent();ComponentName launcher = new ComponentName(packagename, mainClass);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setComponent(launcher);mContext.startActivity(intent);return key_consumed;}// Let the application handle the key.return key_not_consumed;}

对应的Setting界面也可以配置F1,F2的跳转App。

在Setting - System  - Language & input - 下面的 Physical keyboard 下面加  Function keys 选项。

/QSSI.13/packages/apps/Settings/res/xml/language_and_input.xml

代码如下:

    <PreferenceCategoryandroid:key="keyboards_category"android:title="@string/keyboard_and_input_methods_category"><Preferenceandroid:key="virtual_keyboard_pref"android:title="@string/virtual_keyboard_category"android:fragment="com.android.settings.inputmethod.AvailableVirtualKeyboardFragment"settings:keywords="@string/keywords_virtual_keyboard"/><Preferenceandroid:key="physical_keyboard_pref"android:title="@string/physical_keyboard_title"android:summary="@string/summary_placeholder"android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment"/><!-- 修改这里 --><Preferenceandroid:key="function_keyboard_pref"android:title="@string/function_keyboard_title"android:summary="@string/function_keyboard_summary"/></PreferenceCategory>

在QSSI.13/packages/apps/Settings/src/com/android/settings/language/LanguageAndInputSettings.java

    @Overridepublic void onResume() {super.onResume();// Hack to update action bar title. It's necessary to refresh title because this page user// can change locale from here and fragment won't relaunch. Once language changes, title// must display in the new language.final Activity activity = getActivity();if (activity == null) {return;}activity.setTitle(R.string.language_settings);}//增加以下代码@Overridepublic boolean onPreferenceTreeClick(Preference preference) {if (TextUtils.equals("function_keyboard_pref", preference.getKey())) {FunctionKeySettingActivity.start(getActivity());return true;}return super.onPreferenceTreeClick(preference);}@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);replaceEnterpriseStringTitle("language_and_input_for_work_category",WORK_PROFILE_KEYBOARDS_AND_TOOLS,R.string.language_and_input_for_work_category_title);replaceEnterpriseStringTitle("spellcheckers_settings_for_work_pref",SPELL_CHECKER_FOR_WORK,R.string.spellcheckers_settings_for_work_title);replaceEnterpriseStringTitle("user_dictionary_settings_for_work_pref",PERSONAL_DICTIONARY_FOR_WORK,R.string.user_dict_settings_for_work_title);}

FunctionKeySettingActivity 需要自己开发和实现。

通过保存F1,F2的跳转配置 和 获取在Setting里设置的配置

以下代码:

/*** save the packangename to the functionkey** @param key* @param value*/private void saveFunctionSetting(String key, String value) {
//        Settings.Global.getString(getContext().getContentResolver(), key);Settings.Global.putString(getContentResolver(), key, value);}private String getFunctoinSetting(String key) {return Settings.Global.getString(getContentResolver(), key);}

版权声明:

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

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