精华内容
下载资源
问答
  • Android自动点击屏幕

    万次阅读 多人点赞 2017-10-20 14:12:52
    在开发的过程中会遇到自动测试功能,比如如何自动点击按钮进行测试,当然可以使用按键精灵等工具进行测试,不过如何在程序进程中测试呢,下面就介绍下adb shell的操作,通过shell进行点击等操作。1.模拟滑动input ...

    在开发的过程中会遇到自动测试功能,比如如何自动点击按钮进行测试,当然可以使用按键精灵等工具进行测试,不过如何在程序进程中测试呢,下面就介绍下adb shell的操作,通过shell进行点击等操作。

    1.模拟滑动

    input swipe startX startY endX endY duration(ms) 

    2.单击某点

    input tap x y

    3.长按某点

    input touchscreen swipe x y x y duration(ms)

    4.单击某个键

    input keyevent keyCode

    5.长按某个键

    input keyevent --longpress keyCode

    一、如下以点击为例,传入当期点所在屏幕位置或者比例

    package cn.test.autotouch;
    
    import android.app.Activity;
    import java.io.IOException;
    
    public class AutoTouch {
        public int width = 0;
        public int height = 0;
    
        /**
         * 传入在屏幕中的比例位置,坐标左上角为基准
         * @param act 传入Activity对象
         * @param ratioX 需要点击的x坐标在屏幕中的比例位置
         * @param ratioY 需要点击的y坐标在屏幕中的比例位置
         */
        public void autoClickRatio(Activity act, final double ratioX, final double ratioY) {
            width = act.getWindowManager().getDefaultDisplay().getWidth();
            height = act.getWindowManager().getDefaultDisplay().getHeight();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // 线程睡眠0.3s
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 生成点击坐标
                    int x = (int) (width * ratioX);
                    int y = (int) (height * ratioY);
    
                    // 利用ProcessBuilder执行shell命令
                    String[] order = { "input", "tap", "" + x, "" + y };
                    try {
                        new ProcessBuilder(order).start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
        /**
         * 传入在屏幕中的坐标,坐标左上角为基准
         * @param act 传入Activity对象
         * @param x 需要点击的x坐标
         * @param y 需要点击的x坐标
         */
        public void autoClickPos(Activity act, final double x, final double y) {
            width = act.getWindowManager().getDefaultDisplay().getWidth();
            height = act.getWindowManager().getDefaultDisplay().getHeight();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // 线程睡眠0.3s
                    try {
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                    // 利用ProcessBuilder执行shell命令
                    String[] order = { "input", "tap", "" + x, "" + y };
                    try {
                        new ProcessBuilder(order).start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }

    二、使用方法

        /***************************定义*****************************/
        //声明一个Activity
        public static Activity staticActivity;
        //初始化AutoTouch对象
        public static AutoTouch autoTouch = new AutoTouch();
        //在onCreate中对staticActivity赋值
        staticActivity = this;
    
        /***************************使用*****************************/
        //传入所在比例
        autoTouch.autoClickRatio(staticActivity, 0.4375, 0.537); 
        //出入坐标
        autoTouch.autoClickPos(staticActivity, 840, 580);
    展开全文
  • Android 实现自动点击屏幕的方法

    千次阅读 2020-09-29 14:46:06
    //新建一个实体类 import android.app.... * 自动点击屏幕 */ public class AutoTouch { public int width = 0; public int height = 0; /** * 传入在屏幕中的比例位置,坐标左上角为基准 * * @param a.
    //新建一个实体类
    import android.app.Activity;
    
    import java.io.IOException;
    
    /**
     * Created by cxf on 2020/9/29
     * 自动点击屏幕
     */
    public class AutoTouch {
        public int width = 0;
        public int height = 0;
    
        /**
         * 传入在屏幕中的比例位置,坐标左上角为基准
         *
         * @param act    传入Activity对象
         * @param ratioX 需要点击的x坐标在屏幕中的比例位置
         * @param ratioY 需要点击的y坐标在屏幕中的比例位置
         */
        public void autoClickRatio(Activity act, final double ratioX, final double ratioY) {
            width = act.getWindowManager().getDefaultDisplay().getWidth();
            height = act.getWindowManager().getDefaultDisplay().getHeight();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // 线程睡眠0.1s
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 生成点击坐标
                    int x = (int) (width * ratioX);
                    int y = (int) (height * ratioY);
    
                    // 利用ProcessBuilder执行shell命令
                    String[] order = {"input", "tap", "" + x, "" + y};
                    try {
                        new ProcessBuilder(order).start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
        /**
         * 传入在屏幕中的坐标,坐标左上角为基准
         *
         * @param act 传入Activity对象
         * @param x   需要点击的x坐标
         * @param y   需要点击的x坐标
         */
        public void autoClickPos(Activity act, final double x, final double y) {
            width = act.getWindowManager().getDefaultDisplay().getWidth();
            height = act.getWindowManager().getDefaultDisplay().getHeight();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // 线程睡眠0.1s
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                    // 利用ProcessBuilder执行shell命令
                    String[] order = {"input", "tap", "" + x, "" + y};
                    try {
                        new ProcessBuilder(order).start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }

    //代码中运用

    /***************************定义*****************************/ //声明一个Activity

    public static Activity staticActivity;

    //初始化AutoTouch对象

    public static AutoTouch autoTouch = new AutoTouch();

    //在onCreate中对staticActivity赋值

    staticActivity = this;

    /***************************使用*****************************/

    //传入所在比例

    autoTouch.autoClickRatio(staticActivity, 0.4375, 0.537);

    //出入坐标

    autoTouch.autoClickPos(staticActivity, 840, 580);

    展开全文
  • 自动点击器帮你自动点击屏幕,无需ROOT权限。可以方便添加点击位置,设置点击速度。 类似于按键精灵功能。 只支持Android7.0及以上系统
  • 一、应用中模拟物理和屏幕点击事件 例如,模拟对某个view的点击事件 private void simulateClick(View view, float x, float y) { long downTime = SystemClock.uptimeMillis(); final MotionEvent downEvent =...

    一、应用中模拟物理和屏幕点击事件

    例如,模拟对某个view的点击事件

    private void simulateClick(View view, float x, float y) {
        long downTime = SystemClock.uptimeMillis();
        final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_DOWN, x, y, 0);
        downTime += 1000;
        final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_UP, x, y, 0);
        view.onTouchEvent(downEvent);
        view.onTouchEvent(upEvent);
        downEvent.recycle();
        upEvent.recycle();
    }
    
    public void setMouseClick(int x, int y){  
        MotionEvent evenDownt = MotionEvent.obtain(System.currentTimeMillis(),  
                System.currentTimeMillis() + 100, MotionEvent.ACTION_DOWN, x, y, 0);  
        dispatchTouchEvent(evenDownt);  
        MotionEvent eventUp = MotionEvent.obtain(System.currentTimeMillis(),  
                System.currentTimeMillis() + 100, MotionEvent.ACTION_UP, x, y, 0);  
        dispatchTouchEvent(eventUp);  
        evenDownt.recycle();  
        eventUp.recycle();  
    }

    这实现原理就是模拟两个MotionEvent (按下和提起) 然后用一个View 来处理这个Event 。

    二、Instrumentation实现模拟键盘鼠标事件

    // 可以不用在 Activity 中增加任何处理,各 Activity 都可以响应  
    Instrumentation inst = new Instrumentation();  
    inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),   
        MotionEvent.ACTION_DOWN, 200, 500, 0));  
    inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),   
        MotionEvent.ACTION_UP, 200, 500, 0));

    三、系统中模拟物理和屏幕点击事件

    1、adb shell 进入手机命令行 
    2、getevent -h 用法说明

    shell@hwH60:/ $ getevent -h  
    
    Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]
        -t: show time stamps
        -n: don't print newlines
        -s: print switch states for given bits
        -S: print all switch states
        -v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)
        -d: show HID descriptor, if available
        -p: show possible events (errs, dev, name, pos. events)
        -i: show all device info and possible events
        -l: label event types and names in plain text
        -q: quiet (clear verbosity mask)
        -c: print given number of events then exit
        -r: print rate events are received

    [-t] 参数显示事件的时间戳 
    [-n] 取消事件显示时的换行符 
    [-s switchmask] 得到指定位的开关状态 
    [-S] 得到所有开关的状态 
    [-v [mask]] 根据mask的值显示相关信息 
    [-p] 显示每个设备支持的事件类型和编码 
    [-q] 只显示事件数据 
    [-c count] 只显示count次事件的数据 
    [-r] 显示事件接收频率

    3、getevent -p 显示出来当前系统存在的所有input设备,并且把每个设备支持的事件类型以及编码

    shell@hwH60:/ $ getevent -p
    
    add device 1: /dev/input/event2
      name:     "hi6421_on"
      events:
        KEY (0001): 0074 
      input props:
        <none>
    could not get driver version for /dev/input/mouse0, Not a typewriter
    add device 2: /dev/input/event4
      name:     "huawei,touchscreen"
      events:
        KEY (0001): 003b  003c  003d  003e  003f  0040  0041  0042 
                    0043  0044  0057  00bd  00be  00bf  00c0  00c1 
                    0145  014a 
        ABS (0003): 0000  : value 0, min 0, max 1079, fuzz 0, flat 0, resolution 0
                    0001  : value 0, min 0, max 1919, fuzz 0, flat 0, resolution 0
                    0018  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                    0030  : value 0, min 0, max 15, fuzz 0, flat 0, resolution 0
                    0035  : value 0, min 0, max 1079, fuzz 0, flat 0, resolution 0
                    0036  : value 0, min 0, max 1919, fuzz 0, flat 0, resolution 0
                    0039  : value 0, min 0, max 15, fuzz 0, flat 0, resolution 0
                    003a  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
      input props:
        INPUT_PROP_DIRECT
    add device 3: /dev/input/event0
      name:     "mhl_rcp_dev"
      events:
        KEY (0001): 0002  0003  0004  0005  0006  0007  0008  0009 
                    000a  000b  000e  001c  0034  003b  003c  003d 
                    003e  003f  0067  0069  006a  006c  0071  0072 
                    0073  0077  0080  008b  009e  009f  00a1  00a4 
                    00a5  00a7  00a8  00ae  00c8  00c9  00cf  00d0 
                    00d5  00e8  0161  0163  0192  0193  019c 
      input props:
        <none>
    could not get driver version for /dev/input/mice, Not a typewriter
    add device 4: /dev/input/event1
      name:     "hisi_gpio_key.14"
      events:
        KEY (0001): 0072  0073 
      input props:
        <none>
    add device 5: /dev/input/event3
      name:     "hi3630_hi6401_CARD Headset Jack"
      events:
        KEY (0001): 0072  0073  00e2 
        SW  (0005): 0002  0004 
      input props:
        <none>

    4、getevent 查看输入设备和查看事件 
    打印输出log日志,等待输入设备,我们触摸屏幕或是手机物理按键,便会看到这里的变化

    shell@hwH60:/ $ getevent
    
    例如:
    /dev/input/event0: 0001 014a 00000001
    /dev/input/event0: 0003 0000 000000f6
    /dev/input/event0: 0003 0001 000002ed
    /dev/input/event0: 0003 0035 000000f6
    /dev/input/event0: 0003 0036 000002ed
    /dev/input/event0: 0003 0032 00000001
    /dev/input/event0: 0003 0039 00000000
    /dev/input/event0: 0003 003a 00000043
    /dev/input/event0: 0000 0002 00000000

    他们四个参数对应的是device type code value 
    device:指的是处理触摸和按键的输入设备。 
    type:指的是事件类型,EV_SYN [0000] (同步事件),EV_KEY [0001] (按键事件),EV_ABS [0003] (绝对值事件) 
    code 指的是前面type代表的事件中支持的编码。 
    value 指的是值。

    例如:需要模拟一次点击BACK键,模拟点击的功能通常都是使用 /dev/input/event0 这个输入设备,back键的类型为 0001(按键事件),BACK的编码为 0x9e 转换为十进制后即158

    注意的是在getevent中code显示的是十六进制,而sendevent时需要用十进制

    那我们输入如下命令即可模拟一次BACK键的按下和弹起:

    adb shell sendevent /dev/input/event0 1 158 1
    adb shell sendevent /dev/input/event0 1 158 0

    5、input keyevent 命令

    先列举 input keyevent 几个比较常用的code值:

    input keyevent 3    // Home
    
    input keyevent 4    // Back
    
    input keyevent 19  //Up
    
    input keyevent 20  //Down
    
    input keyevent 21  //Left
    
    input keyevent 22  //Right
    
    input keyevent 23  //Select/Ok
    
    input keyevent 24  //Volume+
    
    input keyevent 25  // Volume-
    
    input keyevent 82  // Menu 菜单

    例如: 
    点击back键

    shell@hwH60:/ $ input keyevent 3 

    input text 命令 
    输入框输入内容的。后面参数为 “字符串”,例如输入”helloworld”字符串

    shell@hwH60:/ $ input text "helloworld!"

    input tap 命令 
    模拟单击事件 后面参数为: x y ,例如点击(168,252)位置

    shell@hwH60:/ $ input tap 168 252  

    input swipe 命令 
    此命令为滑动事件。例如:从 30 10 滑动到 30 100

    shell@hwH60:/ $ input swipe 30 10 30 100

    Android代码实现,注意需要root

    private void execShellCmd(String cmd) {  
        try {  
            // 申请获取root权限,这一步很重要,不然会没有作用  
            Process process = Runtime.getRuntime().exec("su");  
            // 获取输出流  
            OutputStream outputStream = process.getOutputStream();  
            DataOutputStream dataOutputStream = new DataOutputStream(  
                    outputStream);  
            dataOutputStream.writeBytes(cmd);  
            dataOutputStream.flush();  
            dataOutputStream.close();  
            outputStream.close();  
        } catch (Throwable t) {  
            t.printStackTrace();  
        }  
    }
    execShellCmd("getevent -p");  
    execShellCmd("sendevent /dev/input/event0 1 158 1");  
    execShellCmd("sendevent /dev/input/event0 1 158 0");  
    execShellCmd("input keyevent 3");//home  
    execShellCmd("input text  'helloworld!' ");  
    execShellCmd("input tap 168 252");  
    execShellCmd("input swipe 100 250 200 280");
    <uses-permission android:name = "android.permission.INJECT_EVENTS"/>

     

    展开全文
  • 1 我们都知道Android 自动的工具 adb shell,里面自带有一个input工具,可以实现屏幕点击,滑动,home键等。 如在Terminal中输入: adb shell #进入系统 input keyevent KEYCODE_BACK #模拟按返回键 input keyeve

    最近弄一块开发板,其中使用usb打印机后,每次自动重启均会自动触发系统usb授权弹窗,在无法改变Android源码的前提下,只能另想它途。

    首先想到最常见的按键精灵…于是查寻按键精灵的原理和方法。

    1 我们都知道Android 自动的工具 adb shell,里面自带有一个input工具,可以实现屏幕的点击,滑动,home键等。

    如在Terminal中输入:
    adb shell #进入系统 input keyevent KEYCODE_BACK #模拟按返回键 input keyevent KEYCODE_HOME #模拟按Home键 input tap 100 200 #在屏幕坐标(100, 200)处点击在这里插入代码片

    那么是不是可以用代码实现呢?
    当然是可以的。看实践后的代码
    方法一:

        /**
         * 执行shell命令
         *
         * @param cmd
         */
        private void execShellCmd(String cmd) {
            android.util.Log.d(TAG, "execShellCmd: " +cmd);
            try {
                // 申请获取root权限,这一步很重要,不然会没有作用
                Process process = Runtime.getRuntime().exec("su");
                // 获取输出流
                OutputStream outputStream = process.getOutputStream();
                DataOutputStream dataOutputStream = new DataOutputStream(
                        outputStream);
                dataOutputStream.writeBytes(cmd);
                dataOutputStream.flush();
                dataOutputStream.close();
                outputStream.close();
            } catch (Throwable t) {
                Log.d("wjz restart ",t);
                t.printStackTrace();
            }
        }
    

    但是坑来了,跑起来以后说没有权限!!
    所以这种方法需要root。但我并不打算对我的设备root…于是继续找方法

    方法二(没有成功,但也并贴出来,留个纪念)

      //使用 ProcessBuilder
       int x = 35, y = 78;
                String[] order = { "input", "tap", " ", x + "", y + "" };
                try {
                    new ProcessBuilder(order).start();
                } catch (IOException e) {
                    android.util.Log.d("GK", e.getMessage());
                    e.printStackTrace();
                }
    

    方法三 (仅做记录,未尝试,不做评论)

    模拟MotionEvent
    通用方法如下:
    private void setSimulateClick(View view, float x, float y) {
    		long downTime = SystemClock.uptimeMillis();
    		final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,
    				MotionEvent.ACTION_DOWN, x, y, 0);
    		downTime += 1000;
    		final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime,
    				MotionEvent.ACTION_UP, x, y, 0);
    		view.onTouchEvent(downEvent);
    		view.onTouchEvent(upEvent);
    		downEvent.recycle();
    		upEvent.recycle();
    	}
    

    方法四 (Instrumentation 本人成功使用的
    Instrumentation是Android的测试框架,通过他,可以模拟很多Activity操作,可以把测试包和目标测试应用加载到同一个进程中运行。既然各个控件和测试代码都运行在同一个进程中了,测试代码当然就可以调用这些控件的方法了,同时修改和验证这些控件的一些数据 :具体可以看这位兄弟做了详细介绍https://blog.csdn.net/a19891024/article/details/54342799

    还可以参考github上的这个项目
    github源码 关于instrumentation的使用
    本人源码

       new Thread(new Runnable() {
                @Override
                public void run() {
                    //模拟点击click事件
                   float x = 625;
                   float y = 723;
                    Instrumentation mInst = new Instrumentation();
                    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
                            SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN,
                            x, y, 0));
                    mInst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),
                            SystemClock.uptimeMillis(), MotionEvent.ACTION_UP,
                            x, y, 0));
                }
            }).start();
    

    这里的两个动作处理,一个是按下一个是抬起,分别在x轴625位置和y轴的723位置。这样就是完整的模拟一个点击事件。想点击屏幕什么地方就修改x和y的值。我使用的工业版不需要考虑兼容性问题,所以直接写死了。
    注意:Instrumentation务必启动于子线程
    这个时候,你run的时候会提示你没有INJECT_EVENTS!而这个权限大家都知道是系统权限,一般的app肯定是没有办法获得的。

    那就见招拆招…将APP变成系统应用。也就是对其进行系统签名.
    本人尝试过的系统签名的几种方法
    最近没有时间写,未完待续…

    展开全文
  • 如题,在进行NFC开发的时候,发现在P2P模式下,两部手机靠近后屏幕会缩小,然后显示“触摸以发送消息”。能否不出墨,实现手机一靠近就自动发送消息?
  • 自动点击屏幕-调用android隐藏的功能

    千次阅读 2014-04-04 23:56:49
    1 首先要找到android系统在
  • // 周期执行点击(200ms) mTimer.schedule(new TimerTask() { @Override public void run() { if (mIsRunning) { String[] order = {"input", "tap", "" + mXPos, "" + mYPos}; try { mBuilder.command(order)...
  • ``` // 最大的屏幕亮度 private float maxLight; // 当前的亮度 private float currentLight;...// 60秒时间不点击屏幕屏幕变暗 private long delayTime = 60 * 1000L; protected void on...
  • // 最大的屏幕亮度 private float maxLight;...// 60秒时间不点击屏幕屏幕变暗 private long delayTime = 60 * 1000L; protected void onCreate() { // 保持屏幕常亮 getWindow().setFlags(WindowManage
  • android点击按钮后,屏幕熄灭,十年后自动亮屏,怎么做? 在测试最后一个加一个电流测试,测试步骤 关屏背光和雷达电源、蓝牙电源,10秒后再重新亮屏和雷达电源、蓝牙电源 测试界面下面出现两个选项“PASS”和"FAIL...
  • Android 4.0设置Dialog点击屏幕不消失

    千次阅读 2014-05-08 11:01:01
    Android ICS对UI做了很大的变动,系统提倡使用DialogFragment,但是系统默认的操作习惯是点击屏幕Dialog会自动消失。 为了实现业务的需求,想过使用Dialog风格的Activity,但是做出来的效果和系统的UI效果不匹配...
  • // 最大的屏幕亮度 private float maxLight;...// 60秒时间不点击屏幕屏幕变暗 private long delayTime = 60 * 1000L; protected void onCreate() { // 保持屏幕常亮 getWindow().setFlags(WindowManage
  • Android 关于手势的操作提供两种形式:一种是针对用户...利用手势检测器可以自动辨别常用的几个手势事件,如点击、长按、滑动等,从而使开发者专注于业务逻辑,不必在手势的行为判断上绞尽脑汁。 layout/activity_gest
  • Android屏幕适配方案

    2019-08-25 12:35:25
    ScreenMatch是根据你的需要,生成需要适配的尺寸的文件,手机会根据屏幕相关参数自动寻找合适的尺寸文件。 二、使用: 1. 引入插件: 在 Android Studio 中安装 ScreenMatch 插件 点击菜单栏上的 File -> ...
  • 后来想了很多办法,最后用模拟点击的方式实现了自动播放视频。话不多说上代码。 final int width = getWindowManager().getDefaultDisplay().getWidth(); final int height = getWindowManager().getDefaultDisplay...
  • 自动点击屏幕功能探索 研究了好几天(小白) ,还是没能实现想要的功能。 1-
  • 遇到一个问题记录下来,在开发中使用了AlertDialog,想点击屏幕其他区域的时候让这个dialog消失,一开始不做任何设置,在小米手机可以正常显示,但是在三星中却有问题,后来发现少了一个属性:View dilaogView = ...
  • Android屏幕手势检测的原理是由于触摸事件的检测与识别比较繁琐,因此Android提供了手势检测器帮助开发者识别手势。利用手势检测器可以自动辨别常用的几个手势事件,如点击、长按、滑动等,从而使开发者专注于业务...
  • Android开发时,需要实现点击屏幕自动对焦,并在焦点处绘制对焦框,对焦完成后对焦框消失。 2、解决思路 首先,确保已经完成相机功能的相关代码,可参考谷歌官方文档Camera。 程序运行的整个过程,由点击...
  • Android屏幕截图,得到截图存储在SD卡上。 所截取的图,实时显示在屏幕上。用户点击图片——消失;用户不点击,指定时间后——图片自动消失。 感性认识: 抛砖引玉,详见注释: 1 2 3 4 5 6 7 8 9 10 11 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 485
精华内容 194
关键字:

android屏幕自动点击