安卓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个参数

相关推荐
恋猫de小郭22 分钟前
Android Studio Cloud 正式上线,不只是 Android,随时随地改 bug
android·前端·flutter
匹马夕阳6 小时前
(十八)安卓开发中的后端接口调用详讲解
android
Pigwantofly8 小时前
鸿蒙ArkTS实战:从零打造智能表达式计算器(附状态管理+路由传参核心实现)
android·华为·harmonyos
Gracker9 小时前
Android Weekly #202514
android
binderIPC9 小时前
Android之JNI详解
android
林志辉linzh9 小时前
安卓AssetManager【一】- 资源的查找过程
android·resources·assetmanger·安卓资源管理·aapt·androidfw·assetmanger2
_一条咸鱼_10 小时前
大厂Android面试秘籍:Activity 权限管理模块(七)
android·面试·android jetpack
lynn8570_blog11 小时前
通过uri获取文件路径手机适配
android·kotlin·android studio
JKIT沐枫11 小时前
PHP如何能获取网站上返回的数组指南
android·大数据
懋学的前端攻城狮12 小时前
Android一些基础-06-一个列表的基本写法
android