os:mtk 8.1
做一个扫码,当前具有焦点的输入框自动填充内容的功能。
1.通过广播
- /frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
@Override
public void onCreate() {
...
initViews();
mWindow.getwindow().setLayout(MATCH_PARENT, WRAP_CONTENT);
// 注册广播
IntentFilter scanFilter = new IntentFilter();
registerReceiver(scanReciever,scanFilter );
}
//添加自定义广播
private broadcastReceiver scanReciever = new broadcastReceiver () {
@Override
public void onReceive(Context context, Intent intent) {
InputConnection conn = getCurrentInputConnection();
String intent_data=intent.getStringExtra("data");
if (conn != null) {
conn.commitText(intent_data,intent_data.length());
}
}
}
- frameworks/base/core/java/com/android/internal/view/IInputMethodManager.aidl
...
// 添加自定义方法
void showtextFromUart(String data);
}
- frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
public void showtextFromUart(String uartData){
try {
mService.showtextFromUart(uartData);
} catch (remoteexception e) {
Log.e(TAG, "showtextFromUart Failed " +e);
}
}
- frameworks/base/services/core/java/com/android/server/InputMethodManagerService.java
public void showtextFromUart(String data){
System.out.println("showtextFromUart "+mCurInputContext+" data ="+data);
if (mCurInputContext != null) {
try {
mCurInputContext.commitText(data,data.length());
} catch (remoteexception e){
Slog.e(TAG," commitText Failed "+e);
}
}
}
调用
InputMethodManager manager = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
if (manager != null) {
manager.showtextFromUart(msg.obj.toString());
}
InputConnection桥梁实现字符从输入法的字符输入到view显示