当软键盘可见时,我希望在Android设备中广泛禁用传感器系统。因此,没有人可以根据传感器信息推断您按哪个键。但是,为了确保没有其他第三方应用程序可以恶意禁用传感器,我想在内核级别执行此操作。我的想法是在SensorManager中添加一个静态变量,并在处理传感器事件时检查它是否为真。在InputMethodManager / InputMethodService中,我将调用一个静态函数来根据键盘的状态设置变量。
仅供参考,我使用的Android版本是2.3.7。
更新:
以下是我添加到ANDROID_SOURCE / framework / core / java / hardware / SensorManager.java的代码
static public class MyBoolean {
public boolean value;
}
public volatile static MyBoolean inputActive;
private static final Object inputLock = new Object();
static {
synchronized(inputLock) {
inputActive = new MyBoolean();
Log.v(TAG, "init input active : " + inputActive.hashCode());
inputActive.value = false;
}
public static void setInputActive(boolean v) {
synchronized(inputLock) {
Log.v(TAG, "set input active : " + v);
inputActive.value = v;
Log.v(TAG, "after set input active : " + inputActive.value + " " + SensorManager.inputActive.value + " " + inputActive.hashCode() + " " + SensorManager.inputActive.hashCode());
}
}
在ANDROID_SOURCE / framework / core / java / inputmethodservice / InputMethodService.java中,我在showSoftInputMethod函数中调用SensorManager.setInputActive(true)。
我很确定函数被调用,因为函数中有一个输出语句。但是当我检查SensorManager中的值时,它永远不会改变。为什么不改变?