大家好我正在开发一个在使用密码时提高安全性的应用程序。几个月以来我一直在努力,我希望得到你的帮助。
我创建了一个新的InputMethodService。我想仅在应用程序打开时才允许访问此输入。该应用程序由密码保护,并在时间限制后关闭。 为了知道应用程序是否已关闭(使用finish()),从输入服务中,应用程序向InputMethodService发送一个具有布尔值的intent(如果它正在运行则为true,如果不是则为false)。 在我的应用程序打开后,在密码检查后发送此意图之一:
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);
}
当应用程序进入onDestroy()时发送最后一个:
MyApplication.java:
@Override
protected void onDestroy() {
//Some stuff
Intent i = new Intent(mContext, PasswordsKeyboard.class);
i.putExtra("appOpen", false);
startService(i);
super.onDestroy();
}
为了捕获这些意图,我在InputMethodService中有一个onStartCommand:
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()方法使它消失时,问题出现了。
无论我做什么,键盘仍然可以在屏幕上看到。如果我选择不同的键盘,我会看到它出现在我的自定义键盘下方。当我使用主页或后退按钮时,没有任何变化,我的键盘仍在屏幕上。 如果我不使用showInputMethodPicker(),我直接使用主页按钮,键盘正常消失..
我很确定他们的startService()调用存在问题,因为当我评论它们时,错误不会发生。
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
好的,我找到了解决方案。
那是愚蠢的,但我只需写一个stopSelf();在onStartCommand()...
这是修改过的代码。
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);
}