如何检查动态壁纸何时失去焦点

时间:2011-05-13 04:50:20

标签: android live-wallpaper

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

 public void onVisibilityChanged(boolean visible) {
     this.visible = visible;
     if (visible) {
        iteration();
        drawFrame();
     } else {
        // stop the animation
        mHandler.removeCallbacks(mIteration);
     }
  }
{p} this.visibleonSurfaceDestroyed中设置为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始终为假。为什么这个窗口的焦点总是错误的?如何让壁纸失去焦点?

1 个答案:

答案 0 :(得分:1)

有几件事......
1)您无法使用动态壁纸中的视图。你必须将自己限制在从holder.lockCanvas()获得的画布上 2)听起来你正在与发射器进行奇怪的互动。这些事情发生了。如果您只是处理简单的屏幕点击,您可以通过使用onCommand()检查android.wallpaper.tap而不是使用onTouchEvent()来解决您的问题。这是更好的做法,因为你只会在壁纸的免费空间上发送水龙头;否则您还将获得由启动器处理的屏幕按压。这里有关于onCommand的一些信息:http://developer.android.com/resources/articles/live-wallpapers.html
比如像这样......

@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);
}