android 检测外接键盘并设置输入法布局

简介: android 检测外接键盘并设置输入法布局

需求:


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


实现:


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


<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 {
  @Override
  public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
  Intent 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();
  }
  @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;
  }
    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()");
  }
}
相关文章
|
10月前
|
Android开发 开发者
Android设置View是否可用
在Android开发中,有时需要将布局设置为不可点击状态(失去焦点)。常见的解决方法是使用`setOnClickListener(null)`,但本文介绍一种更通用的方式:通过封装`setViewEnabled`方法实现。该方法可递归设置View及其子View的启用状态,支持传入目标View和布尔值(`true`为可用,`false`为禁用)。例如,调用`setViewEnabled(edittext, false)`即可禁用EditText。文章附有源码及示例动图,帮助开发者快速理解与应用。
227 1
|
6月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
220 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
6月前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
174 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
10月前
|
Android开发 开发者
Android中Dialog位置+样式的设置
本文介绍了在Android开发中如何设置Dialog的位置和样式。通过自定义`MyDialog`类,可以灵活调整Dialog的显示位置,例如将其固定在屏幕底部,并设置宽度匹配父布局。同时,文章还展示了如何模仿Android原生Dialog样式,通过定义`MyDialogStyle`去除标题栏、设置背景透明度、添加阴影效果以及配置点击外部关闭等功能,从而实现更加美观和符合需求的Dialog效果。代码示例详细,便于开发者快速上手实现。
546 2
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
Android开发
Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果
本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。
1236 4
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
1038 0
|
Web App开发 存储 Android开发
android 手机恢复出厂设置,恢复青春活力
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/50516200 未经博主允许不得转载。 博主地址是:http://blog.csdn.net/freewebsys 1,关于android android手机用起来没啥太多问题,软件安装的也不多。 但是最近手机开始频繁死机,连接wifi也是死机。
1734 0
|
5月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
866 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
735 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡

热门文章

最新文章