Android:通过我的透明视图(服务)让触摸事件

时间:2014-03-02 21:00:39

标签: java android android-service android-view

我写了一个服务类,它创建了一个透明视图(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;
    }

1 个答案:

答案 0 :(得分:0)

  

运行正常,但问题是如果我在Android菜单或其他应用程序中,我无法按任何按钮。 (我的观点似乎不让TouchEvents通过)

这是设计的。

  

如何正确地将TouchEvent传递回系统?

你没有。如果您能够通过系统窗口查看触摸事件,则不会将该触摸事件分派给其他应用程序。这可以防止“tapjacking”攻击。