使用showInputMethodPicker()更改后,Android输入法不会隐藏
嗨,伙计们,我正在开发一个应用程序,它可以提高使用密码时的安全性。几个月以来我一直在做这件事,我需要你的帮助 我已经创建了一个新的InputMethodService。我希望仅在应用程序打开时才允许访问此输入。应用程序由密码保护,并在一个时间限制后关闭。 为了知道应用程序是否使用finish关闭,应用程序从输入服务发送一个intent,如果正在运行,则发送布尔值true;如果未运行,则发送布尔值false。 在检查密码后,当我的应用程序打开时,会发送以下意图之一: MyApplication.java:使用showInputMethodPicker()更改后,Android输入法不会隐藏,android,android-intent,input,service,keyboard,Android,Android Intent,Input,Service,Keyboard,嗨,伙计们,我正在开发一个应用程序,它可以提高使用密码时的安全性。几个月以来我一直在做这件事,我需要你的帮助 我已经创建了一个新的InputMethodService。我希望仅在应用程序打开时才允许访问此输入。应用程序由密码保护,并在一个时间限制后关闭。 为了知道应用程序是否使用finish关闭,应用程序从输入服务发送一个intent,如果正在运行,则发送布尔值true;如果未运行,则发送布尔值false。 在检查密码后,当我的应用程序打开时,会发送以下意图之一: MyApplication.j
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Some stuff
// Ask password result
if (requestCode == 10) {
if (resultCode == 10) { //password ok
//Some stuff
Intent i = new Intent(mContext, PasswordsKeyboard.class);
i.putExtra("appOpen", true);
startService(i);
} else {
Intent i = new Intent(mContext, PasswordsKeyboard.class);
i.putExtra("appOpen", false);
startService(i);
finish();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onDestroy() {
//Some stuff
Intent i = new Intent(mContext, PasswordsKeyboard.class);
i.putExtra("appOpen", false);
startService(i);
super.onDestroy();
}
最后一个在应用程序进入onDestroy时发送:
MyApplication.java:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Some stuff
// Ask password result
if (requestCode == 10) {
if (resultCode == 10) { //password ok
//Some stuff
Intent i = new Intent(mContext, PasswordsKeyboard.class);
i.putExtra("appOpen", true);
startService(i);
} else {
Intent i = new Intent(mContext, PasswordsKeyboard.class);
i.putExtra("appOpen", false);
startService(i);
finish();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onDestroy() {
//Some stuff
Intent i = new Intent(mContext, PasswordsKeyboard.class);
i.putExtra("appOpen", false);
startService(i);
super.onDestroy();
}
为了捕捉这些意图,我在InputMethodService中有一个onStart命令:
MyInputMethodeService.java:
public int onStartCommand(Intent intent, int flags, int startId) {
boolean myBool= false;
try {
myBool= intent.getBooleanExtra("appOpen", false);
} catch (Exception e) {
}
isAppOpen.edit().putBoolean("appOpen", myBool).commit();
return super.onStartCommand(intent, flags, startId);
}
这段代码可以工作,但我在使用自定义键盘时遇到了一个很大的问题。当我选择键盘时,它会出现并正常工作。当我想使用Space和showInputMethodPicker方法使其消失时,问题就出现了
无论我做什么,键盘在屏幕上都是可见的。如果选择其他键盘,我会看到它显示在自定义键盘下方。当我使用home或back按钮时,没有任何变化,我的键盘仍在屏幕上。
如果我不使用showInputMethodPicker并直接使用home按钮,键盘将正常消失
我很确定他们的问题与我的startService调用有关,因为当我评论他们时,错误不会发生
任何帮助都将不胜感激!谢谢大家! 好了,伙计们,我找到了解决办法 那是愚蠢的,但我只需要写一个自我;在onstart命令中 这是修改后的代码
public int onStartCommand(Intent intent, int flags, int startId) {
boolean myBool= false;
try {
myBool= intent.getBooleanExtra("appOpen", false);
} catch (Exception e) {
}
isAppOpen.edit().putBoolean("appOpen", myBool).commit();
stopSelf();
return super.onStartCommand(intent, flags, startId);
}
我认为startService会启动,或者不管我在堆栈上的输入方法是什么,但我仍然看不出问题出在哪里。