问题描述:
题主的目的是要实现扫描枪来扫描条形码,但是发现有时候发现扫描结果并不全.比如微信退款中,条码内容是"WX123456",但是扫码结果却是"123456".经过调试以后发现是搜狗输入法截取了英文字符串.现在来提问有何办法来解决这个问题.
已经得到的知识点:
1.所有的keyevent会先交由输入法,由输入法来判定是否处理本次keyevent.如果不处理就交给app去处理,如果输入 法处理了本次keyevent那么app就得不到这个keyevent.
2.如果交给app处理,那么获得focus的View会处理keyevent.
3.一个关键的方法,android.view.inputmethod.InputMethodManager.isAcceptingText()
的方法说明是,
Return true if the currently served view is accepting full text edits.
If false, it has no input connection, so can only handle raw key
events.
就是说,如果这个值是true他就会接受输入法的文字输入.如果是false,那么就不会有输入连接,获得焦点的View只能得到原生的keyevent.
4.经过我的调试,isAcceptingText()在返回false的情况下,搜狗输入法依然拦截了部分keyevent.同样的条件下,我分别测试了"google输入法","百度输入法","QQ输入法",他们都不会拦截keyevent,扫描枪扫描结果是正确的.
5.目前可以做到的是,当我扫码的时候可以检测输入法,如果是搜狗,那么弹出InputMethodPicker来让用户重新选择输入法.但是这种体验并不好.