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

发布于:2025-04-08 ⋅ 阅读:(37) ⋅ 点赞:(0)

客户要求默认键盘

+#fi
+
+echo "ro.product.locale=nl-BE"
 echo "ro.wifi.channels=$PRODUCT_DEFAULT_WIFI_CHANNELS"

后面发现usb otg 转接的键盘无法配置成比利时键盘 AZERTY
思路是在监听物理键盘的插入,直接在监听中配置成比利时键盘

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);

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

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"
+            />
+
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个参数


网站公告

今日签到

点亮在社区的每一天
去签到