Android 如何检查实时壁纸何时失去焦点

Android 如何检查实时壁纸何时失去焦点,android,live-wallpaper,Android,Live Wallpaper,我有一个使用振动许可的实时壁纸。当显示所有应用程序的幻灯片屏幕被拉出时。。。(单击显示日历/计算器/Gmail等的灰色矩形按钮),单击时幻灯片屏幕上的图标(如Gmail/日历/计算器等)也会振动。我想知道为什么会发生这种情况,因为墙纸应该失去焦点,其可见性应该已经改变,因此墙纸不应该处于活动状态。但是,当应用程序开始运行时,不会发生这种情况。它只发生在幻灯片屏幕上。我已经实现了OnvisibilityChanged() 此.visible在onsurfacedestromed中设置为false

我有一个使用振动许可的实时壁纸。当显示所有应用程序的幻灯片屏幕被拉出时。。。(单击显示日历/计算器/Gmail等的灰色矩形按钮),单击时幻灯片屏幕上的图标(如Gmail/日历/计算器等)也会振动。我想知道为什么会发生这种情况,因为墙纸应该失去焦点,其可见性应该已经改变,因此墙纸不应该处于活动状态。但是,当应用程序开始运行时,不会发生这种情况。它只发生在幻灯片屏幕上。我已经实现了
OnvisibilityChanged()

此.visible
onsurfacedestromed
中设置为false

我也做了

View view = new View(getApplicationContext());
view.setFocusableInTouchMode(true);
view.setEnabled(true);
view.requestFocusFromTouch();
if(view.hasWindowFocus())
{
 Log.v(TAG,"WindowFocus="+view.hasWindowFocus());
 vibrator.vibrate(100);
}
但是
view.hasWindowFocus
始终为false。为什么这个窗口的焦距总是错误的?我怎样才能使墙纸失去焦距?

有几件事…
1) 您无法在live Wallper中以这种方式处理视图。您必须将自己限制在从holder.lockCanvas()获得的画布上。
2) 听起来你和发射器的互动很奇怪。这些事情经常发生。如果您只是处理简单的屏幕点击,您可能可以通过使用onCommand()检查android.wallper.tap而不是使用onTouchEvent()来解决问题。这是更好的做法,因为你只会收到墙纸上空闲空间的点击;否则,您还将得到由启动器处理的屏幕按压。这里有一些关于onCommand的信息:
比如像这样的事情

@Override
public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested) {
    if (action.equals(WallpaperManager.COMMAND_TAP)) {
          mTouchX = x;
          mTouchY = y;
    }
    return super.onCommand(action, x, y, z, extras, resultRequested);
}
@Override
public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested) {
    if (action.equals(WallpaperManager.COMMAND_TAP)) {
          mTouchX = x;
          mTouchY = y;
    }
    return super.onCommand(action, x, y, z, extras, resultRequested);
}