我写了一个服务类,它创建了一个透明视图(LinearLayout)。 如果用户按住,则会开始播放一些音乐。
运行正常,但问题是如果我在Android菜单或其他应用程序中,我无法按任何按钮。 (我的观点似乎不让TouchEvents通过)
我尝试过很多东西,例如返回false或停止拦截,但是当服务运行时我仍然无法按下任何gui控件。
如何正确地将TouchEvent传递回系统?
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() ==
MotionEvent.ACTION_UP)
Log.i(TAG, "Action :" + event.getAction() + "\t X :" + event.getRawX()
+ "\t Y :" + event.getRawY());
if(event.getAction() == MotionEvent.ACTION_DOWN) {
if(!mp.isPlaying())
mp.start();
}
if(event.getAction() == MotionEvent.ACTION_UP) {
mp.pause();
}
//View parent = (View) v.getParent().getParent();
//parent.onTouchEvent(event);
v.onTouchEvent(event);
return false;
}
答案 0 :(得分:0)
运行正常,但问题是如果我在Android菜单或其他应用程序中,我无法按任何按钮。 (我的观点似乎不让TouchEvents通过)
这是设计的。
如何正确地将TouchEvent传递回系统?
你没有。如果您能够通过系统窗口查看触摸事件,则不会将该触摸事件分派给其他应用程序。这可以防止“tapjacking”攻击。