Android外付けキーボードを検出し入力レイアウトを設定する
5005 ワード
必要:
外付けキーボードに接続すると、システム入力言語が自動的にフランス語キーボードに変更されます.
実装:
外付けデバイスの変更のリスニング>フルキーボードデバイスを含むかどうかのクエリー>入力レイアウトの変更
起動サービス:
外付けキーボードに接続すると、システム入力言語が自動的にフランス語キーボードに変更されます.
実装:
外付けデバイスの変更のリスニング>フルキーボードデバイスを含むかどうかのクエリー>入力レイアウトの変更
<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()");
}
}