需求:

接入外接键盘后, 系统输入语言自动变更为法语键盘

实现:

监听外接设备变更 > 查询是否包含全键盘设备 > 变更输入法布局

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    <uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT" /><!-- 开机自动启动 --><receiver android:name=".Receiver">            <intent-filter>                <action android:name="android.intent.action.BOOT_COMPLETED" />            </intent-filter><intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.DEFAULT"/>             </intent-filter>        </receiver><!-- 监听服务 --><service android:name=".KeyboardService">            <intent-filter><action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>             </intent-filter>        </service>

开机启动服务:

import android.os.Bundle;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import com.zed.keyboardDeviceReceiver.*;public class Receiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubIntent i = new Intent(context, KeyboardService.class);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startService(i);}    }

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;public class KeyboardService extends Service implements InputManager.InputDeviceListener{private InputManager mIm;private Context context;public void onCreate(){super.onCreate();context = getApplicationContext();}@Overridepublic void onStart(Intent intent, int startId) {// TODO Auto-generated method stubsuper.onStart(intent, startId); mIm = (InputManager)context.getSystemService(Context.INPUT_SERVICE); mIm.registerInputDeviceListener(this, null);//添加监听int[] ids = mIm.getInputDeviceIds();//非常重要, 决定后续是否能监听到状态变化}@Overridepublic void onConfigurationChanged(Configuration newConfig) {// TODO Auto-generated method stub//doNothingandroid.util.Log.d("KeyboardService", "0410 onConfigurationChanged");}public void onDestroy(){super.onDestroy();mIm.unregisterInputDeviceListener(this);//注销监听}public IBinder onBind(android.content.Intent intent){return null;}    public void onInputDeviceAdded(int deviceId){android.util.Log.d("KeyboardService", "0410 > onInputDeviceAdded()");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()) {                    final String inputDeviceDescriptor = device.getDescriptor();                    final String keyboardLayoutDescriptor =                            mIm.getCurrentKeyboardLayoutForInputDevice(inputDeviceDescriptor);                    mIm.addKeyboardLayoutForInputDevice(inputDeviceDescriptor,                            "com.android.inputdevices/com.android.inputdevices.InputDeviceReceiver/keyboard_layout_french");//添加布局mIm.setCurrentKeyboardLayoutForInputDevice(inputDeviceDescriptor,                        "com.android.inputdevices/com.android.inputdevices.InputDeviceReceiver/keyboard_layout_french");//更改布局                }            }}    public void onInputDeviceRemoved(int deviceId){android.util.Log.d("KeyboardService", "0410 > onInputDeviceRemoved()");}    public void onInputDeviceChanged(int deviceId){android.util.Log.d("KeyboardService", "0410 > onInputDeviceChanged()");}}

更多相关文章

  1. 布局中嵌套布局!
  2. Android中Button的几种点击的写法
  3. 一起学android之ViewPager讲解(11)
  4. Android(安卓)UI编程(2)——多级列表(ExpandableListView)
  5. Android(安卓)Fragment 基本介绍
  6. Android开发之布局简介(1)
  7. android ImageView实现上面圆角下面直角(xml实现方法)
  8. 你需要了解下Android(安卓)View的更新requestLayout与重绘invali
  9. 修改软键盘右下角的确定样式

随机推荐

  1. Mysql深入探索之Explain执行计划详析
  2. MySQL 8.0统计信息不准确的原因
  3. MySQL如何快速导入数据
  4. MySQL备份脚本的写法
  5. 5个MySQL GUI工具推荐,帮助你进行数据库管
  6. mysql查看用户授权信息的具体方法
  7. 如何清除mysql注册表
  8. Mysql 命令行模式访问操作mysql数据库操
  9. 解析MySQL8.0新特性——事务性数据字典与
  10. Mysql| 使用通配符进行模糊查询详解(like