微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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显示

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐