1.自定义输入法
参考资料:http://blog.csdn.net/nicolelili1/article/details/78723259
2.在继承了类InputMethodService的方法onCreateInputView()中注册广播接收者
@Override
public View onCreateInputView() {
View mkeyView = LayoutInflater.from(this).inflate(R.layout.keyboardview, null);
keyboardUtil = new KeyboardUtil(this, (KeyboardView) mkeyView.findViewById(R.id.keyboardView));
registReceiver();
return mkeyView;
}
public void registReceiver(){
receiveTextReceiver = new ReceiveTextReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BROADCAST_ACTION);
myImeService.registerReceiver(receiveTextReceiver, intentFilter);
}
3.接收到广播后调用InputConnection的commitText方法输入字符
private class ReceiveTextReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String str = intent.getStringExtra("text");
InputConnection ic = myImeService.getCurrentInputConnection();
ic.commitText(str,str.length());
}
}
4.onCreateInputView需要在键盘被显示出来的时候才会被调用,为了确保广播被注册,当应用启动的时候,手动调用代码显示输入法
InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
boolean isOpen=imm.isActive();//isOpen若返回true,则表示输入法打开
if(!isOpen){
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
5.需要输入文字时发送广播,参数为所需要输入的文字
private void sendBroadCast(String str){
Intent intent = new Intent();
intent.setAction(BROADCAST_ACTION);
intent.putExtra("text", str);
sendBroadcast(intent);
}
6.运行结果
环境:当输入命令后,调用发送广播的方法后,将文字追加到当前光标聚焦的文本框中
追加到浏览器
追加到邮件
追加到通讯录