修复因界面切换导致输入法管理错误,引起的返回键无法使用的问题

android系统的back键无响应: 系统每个界面获取焦点时都会获取一个输入法实例,失去焦点时会释放此实例。在系统响应back键的时候,会调用到输入法,因为要执行输入法退出等操作。如果不能正常响应,则会有back无法往下步流程发送的问题。

 可能出现的原因:1  如果删除了输入法,则back键流程无法执行,造成back键无响应的问题。

                              2  如果在界面获取完焦点后,输入法报错重启了,则当前界面获取的实例不再适用,造成back键无响应的问                                      题。

                              3  界面切换过快导致界面在退出时无法正常释放输入法实例,重新获取焦点时,无法正常获取输入法的实                                          例,导致重新启动后流程紊乱。下面为解决此问题的diff。

diff --git a/frameworks/base/services/java/com/android/server/InputMethodManagerService.java b/frameworks/base/services/java/com/android/server/InputMethodManagerService.java
old mode 100644
new mode 100755
index a996dbd..0a62710
--- a/frameworks/base/services/java/com/android/server/InputMethodManagerService.java
+++ b/frameworks/base/services/java/com/android/server/InputMethodManagerService.java
@@ -1896,6 +1896,14 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                         // be calling through here after that change happens.
                         Slog.w(TAG, "Focus gain on non-focused client " + cs.client
                                 + " (uid=" + cs.uid + " pid=" + cs.pid + ")");
+                         if(mCurClient!=null){
+                            Slog.w(TAG, "Focus gain on non-focused mCurClient " + mCurClient.client
+                                     + " (uid=" + mCurClient.uid + " pid=" + mCurClient.pid + ")");
+                            if((mCurClient.uid!=cs.uid)||(mCurClient.pid!=cs.pid)){
+                                executeOrSendMessage(cs.client, mCaller.obtainMessageIO(
+                                        MSG_SET_ACTIVE, 0, cs));
+                            }
+                         }
                         return null;
                     }
                 } catch (RemoteException e) {

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++图形用户界面开发框架,确实有一些情况下无法切换中文输入法。这可能是由于以下几个原因导致的: 首先,Qt并不直接负责输入法管理。它仅提供了输入事件的处理接口,并依赖于操作系统来处理和管理输入法。如果操作系统的中文输入法切换功能存在问题,那么在Qt中就无法正常切换中文输入法。 其次,Qt的输入焦点机制和输入事件处理会影响中文输入法切换。在输入焦点未正确设置或处理的情况下,操作系统可能无法正确识别应用程序的输入区域,从而导致无法切换到中文输入法。此外,如果Qt应用程序没有正确处理输入事件,也可能导致无法切换输入法。 最后,编写Qt应用程序时可能会忽略或错误地设置与中文输入法切换相关的参数。例如,通过设置窗口属性、输入框属性等来控制输入法切换行为。如果这些参数设置不正确,就会导致无法切换中文输入法。 为了解决这个问题,可以采取以下几种方式: 1. 检查操作系统的中文输入法设置,确保输入法切换功能正常。如果操作系统的输入法设置有问题,需要修复或升级操作系统。 2. 在Qt应用程序中正确设置和处理输入焦点,确保操作系统能够正确地识别和切换输入法。 3. 在编写Qt应用程序时,仔细检查和设置与中文输入法切换相关的参数,确保它们的正确性。 综上所述,Qt无法切换中文输入法问题可能涉及操作系统设置、输入焦点处理和参数设置等多个方面。通过检查和修复这些可能存在的问题,可以解决无法切换中文输入法的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值