我有一个使用振动许可的动态壁纸。当显示所有应用程序的幻灯片屏幕被拉出...(点击时显示日历/计算器/ Gmail等的灰色矩形按钮),点击时,幻灯片屏幕上的图标如Gmail /日历/计算器等振动。我想知道为什么会这样,因为壁纸应该失去焦点,它的可见性应该已经改变,因此壁纸不应该是活跃的。但是,当应用程序开始运行时,不会发生这种情况。它只发生在幻灯片屏幕上。我已经实施了OnvisibilityChanged()
。
public void onVisibilityChanged(boolean visible) {
this.visible = visible;
if (visible) {
iteration();
drawFrame();
} else {
// stop the animation
mHandler.removeCallbacks(mIteration);
}
}
{p} this.visible
在onSurfaceDestroyed
中设置为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
始终为假。为什么这个窗口的焦点总是错误的?如何让壁纸失去焦点?
答案 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);
}