安卓14 默认比利时物理键盘

客户要求默认键盘

bash 复制代码
+#fi
+
+echo "ro.product.locale=nl-BE"
 echo "ro.wifi.channels=$PRODUCT_DEFAULT_WIFI_CHANNELS"

后面发现usb otg 转接的键盘无法配置成比利时键盘 AZERTY

思路是在监听物理键盘的插入,直接在监听中配置成比利时键盘

bash 复制代码
diff --git a/src/com/android/settings/sim/receivers/SimCompleteBootReceiver.java b/src/com/android/settings/sim/receivers/SimCompleteBootReceiver.java
index e9acf94976..8fc0001aea 100644
--- a/src/com/android/settings/sim/receivers/SimCompleteBootReceiver.java
+++ b/src/com/android/settings/sim/receivers/SimCompleteBootReceiver.java
@@ -21,6 +21,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.util.Log;
 
+import com.android.settings.Junjie;
 import com.android.settings.sim.SimActivationNotifier;
 import com.android.settings.sim.SimNotificationService;
 
@@ -34,6 +35,10 @@ public class SimCompleteBootReceiver extends BroadcastReceiver {
             Log.e(TAG, "Invalid broadcast received.");
             return;
         }
+        Intent i = new Intent(context, Junjie.class);
+        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        context.startService(i);

在这个开机广播中启动监听服务

bash 复制代码
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3ec0a3cff0..baee450325 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -189,6 +189,11 @@
                        android:value="true" />
         </activity>
 
+        <service android:name=".Junjie"
+            android:enabled="true"
+            android:exported="true"
+            />
+
bash 复制代码
package com.android.settings;
import android.app.Service;
import android.os.IBinder;
import android.content.Context;
import android.view.InputDevice;
import android.os.Handler;
import android.content.Intent;
import android.os.Message;
import android.content.res.Configuration;
import android.hardware.input.InputManager;
import android.hardware.input.InputDeviceIdentifier;
import android.view.inputmethod.InputMethodManager;

public class Junjie extends Service implements InputManager.InputDeviceListener{
    private InputManager mIm;
    private Context context;
    public void onCreate(){
        super.onCreate();
        context = getApplicationContext();
    }
    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
        mIm = (InputManager)context.getSystemService(Context.INPUT_SERVICE);
        mIm.registerInputDeviceListener(this, null);//添加监听
        int[] ids = mIm.getInputDeviceIds();//非常重要, 决定后续是否能监听到状态变化
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub
        //doNothing
        android.util.Log.d("KeyboardService", "0410 onConfigurationChanged");

    }
    public void onDestroy(){
        super.onDestroy();
        mIm.unregisterInputDeviceListener(this);//注销监听
    }
    public IBinder onBind(android.content.Intent intent){
        return null;
    }
    @Override
    public void onInputDeviceAdded(int deviceId){
        android.util.Log.d("KeyboardService", "0410 > onInputDeviceAdded() deviceId:"+deviceId);
        InputMethodManager input = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);//得到InputMethodManager。
        final int[] devices = InputDevice.getDeviceIds();//获取设备
        for (int i = 0; i < devices.length; i++) {//遍历查找
            InputDevice device = InputDevice.getDevice(devices[i]);
            if (device != null
                    && !device.isVirtual()
                    && device.isFullKeyboard()) {
                InputDeviceIdentifier identifier = device.getIdentifier();
               // mIm.addKeyboardLayoutForInputDevice(identifier,
               //         "com.android.inputdevices/com.android.inputdevices.InputDeviceReceiver/keyboard_layout_belgian");//添加布局
                // liujunjie
                //mIm.setKeyboardLayoutForInputDevice(identifier,
                //        "com.android.inputdevices/com.android.inputdevices.InputDeviceReceiver/keyboard_layout_belgian");//更改布局

                mIm.setKeyboardLayoutForInputDevice(identifier,0,input.getCurrentInputMethodInfo(),input.getCurrentInputMethodSubtype(),
                        "com.android.inputdevices/com.android.inputdevices.InputDeviceReceiver/keyboard_layout_belgian");
            }
        }
    }
    @Override
    public void onInputDeviceRemoved(int deviceId){
        android.util.Log.d("KeyboardService", "0410 > onInputDeviceRemoved() deviceId"+deviceId);
    }

    @Override
    public void onInputDeviceChanged(int deviceId){
        android.util.Log.d("KeyboardService", "0410 > onInputDeviceChanged() deviceID"+deviceId);
    }

}

这个服务的点在于setKeyboardLayoutForInputDevice 4个参数

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
梅梅9661 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas