首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测服务机器人中的MotionEvent.ACTION_DOWN

如何检测服务机器人中的MotionEvent.ACTION_DOWN
EN

Stack Overflow用户
提问于 2016-10-24 09:58:17
回答 1查看 3K关注 0票数 7

我正在运行一个后台服务来检测Android5.0中的MotionEvent.ACTION_DOWN。我使用了下面的代码,它可以检测我的触摸事件,但我不能触摸其他应用程序。我怎么才能修好它?如果你有更好的解决办法,请给我。谢谢大家。

代码语言:javascript
复制
public class TouchServiceListener extends Service implements OnTouchListener {
    private WindowManager mWindowManager;
    // linear layout will use to detect touch event
    private LinearLayout touchLayout;   

     @Override
    public void onCreate() {
        super.onCreate();
        touchLayout = new LinearLayout(this);
            // set layout width 30 px and height is equal to full screen
            LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            touchLayout.setLayoutParams(lp);
            // set color if you want layout visible on screen
            touchLayout.setBackgroundColor(Color.CYAN);
            // set on touch listener
            touchLayout.setOnTouchListener(this);

            // fetch window manager object
            mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
            // set layout parameter of window manager
            WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT, // width of layout 30 px
                    WindowManager.LayoutParams.MATCH_PARENT, // height is equal to full screen
                    WindowManager.LayoutParams.TYPE_PHONE, // Type Ohone, These are non-application windows providing user interaction with the phone (in particular incoming calls).
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // this window won't ever get key input focus
                    PixelFormat.TRANSLUCENT);
            mParams.gravity = Gravity.LEFT | Gravity.TOP;
            Log.i(TAG, "add View");

            mWindowManager.addView(touchLayout, mParams);
    }


    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {        
        if(motionEvent.getAction() == MotionEvent.ACTION_UP|motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            Log.d(TAG, "Touch me");
        }
        return true;
    }
 @Override
 public IBinder onBind(Intent intent) {
    return null;
  }
 }

清单

代码语言:javascript
复制
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 11:33:01

首先,按照overlay.you设置布局,设置宽度和高度,match_parent覆盖整个屏幕,这样您就不会访问应用程序之外的应用程序。

代码语言:javascript
复制
 package anew.mikka.myapplication;

    import android.app.Service;
    import android.content.Intent;
    import android.graphics.PixelFormat;
    import android.os.IBinder;
    import android.view.Gravity;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.WindowManager;
    import android.view.View.OnTouchListener;
    import android.widget.Button;
    import android.widget.Toast;

    public class max extends Service implements View.OnTouchListener {
        Button mButton;
        @Override
        public IBinder
        onBind(Intent intent) {
            return null;
        }

        @Override
        public void onCreate() {
            super.onCreate();
            //mView = new HUDView(this);
            mButton = new Button(this);
            mButton.setText("Overlay button");
            mButton.setOnTouchListener(this);

            WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                            | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                            | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                    PixelFormat.TRANSLUCENT);
            params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
            params.setTitle("Load Average");
            WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
            wm.addView(mButton, params);

        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            if(mButton != null)
            {
                ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mButton);
                mButton = null;
            }
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Toast.makeText(this,"Overlay button event", Toast.LENGTH_SHORT).show();
            return false;
        }


    }
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40215514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档