Android 当前焦点输入框自动填充内容

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());
       }
    }
 }
2.添加自定义方法
  • 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显示

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值