Android Studio无障碍服务实现坐标点击

2024-04-13 1247阅读

祝贺大家顺利运行

Android Studio无障碍服务实现坐标点击
(图片来源网络,侵删)

基本配置

创建文件

1.在....../main/java/com.example.你的包名/,下创建一个叫MyAccessibilityService的java类。

2.在....../main/res/xml/,文件下创建一个叫accessibility_service_config的XML文件。

加入代码

1.在AndroidManifest.xml加入:

        
            
                
            
            
        

2.在....../res/values/strings.xml中加入:

随便写点什么

3.在MyAccessibilityService.java(我们创建的文件)写入全代码:

package com.example.你的包名;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.GestureDescription;
import android.graphics.Path;
import android.os.Build;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;
public class MyAccessibilityService extends AccessibilityService {
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        // 处理无障碍事件
        clickScreen(500,500);//这里根本点击坐标
        Toast.makeText(getApplicationContext(), "开始点击", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onInterrupt() {
        // 处理服务中断
    }
    /*功能
    * 1.坐标点击clickScreen()
    * 2.截屏及保存
    * */
    // 模拟点击屏幕500,500的坐标
    public void clickScreen(int x, int y) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            GestureDescription.Builder builder = new GestureDescription.Builder();
            Path path = new Path();
            path.moveTo(x, y);
            path.lineTo(x, y);
            builder.addStroke(new GestureDescription.StrokeDescription(path, 0, 1));
            GestureDescription gesture = builder.build();
            dispatchGesture(gesture, null, null);
            Toast.makeText(getApplicationContext(), "点击成功可能", Toast.LENGTH_SHORT).show();
        } else {
            // 对于低于Android 5.0的版本,可以使用其他方法实现点击功能
        }
    }
    //截屏
}

4.在accessibility_service_config.xml(我们创建的文件)全代码:

*注意:能否运行或许关键就在这,一定不要少了关键的几行。

 

启动运行

无障碍服务的原理大家应该不懂,那就不需要懂(我也是新手)。我发现了一个现象可以帮助我们测试我们的程序是否执行了MyAccessibilityService里的代码。

1.在界面添加一个按钮,然后加入按钮的点击事件:(还记得怎么写吗?就是个点击事件)

    
        Button button=findViewById(R.id.b_1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //不用写什么都行
            }
        });

这个现象就是:我们点击了一次这个按钮,程序就会自动点击一次屏幕坐标(这代表MyAccessibilityService被执行了)

所有文件全代码

1.AndroidManifest.xml 2.accessibility_service_config.xml 3.MyAccessibilityService.java 4.

1.AndroidManifest.xml


    
        
            
                
            
            
        
        
.....
    
.....

2.accessibility_service_config.xml

 

3.MyAccessibilityService.xml

package com.example.你的包名;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.GestureDescription;
import android.graphics.Path;
import android.os.Build;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;
public class MyAccessibilityService extends AccessibilityService {
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        // 处理无障碍事件
        clickScreen(500,500);
        Toast.makeText(getApplicationContext(), "开始点击", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onInterrupt() {
        // 处理服务中断
    }
    // 模拟点击屏幕500,500的坐标
    public void clickScreen(int x, int y) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            GestureDescription.Builder builder = new GestureDescription.Builder();
            Path path = new Path();
            path.moveTo(x, y);
            path.lineTo(x, y);
            builder.addStroke(new GestureDescription.StrokeDescription(path, 0, 1));
            GestureDescription gesture = builder.build();
            dispatchGesture(gesture, null, null);
            Toast.makeText(getApplicationContext(), "点击成功", Toast.LENGTH_SHORT).show();
        } else {
            // 对于低于Android 5.0的版本,可以使用其他方法实现点击功能
        }
    }
}

4.MainActivity.java

package com.example.你的包名;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.Settings;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_CODE_ENABLE_ACCESSIBILITY = 1;
    private static final int REQUEST_CODE_OVERLAY_PERMISSION = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //去开启无障碍服务
        Intent intent=new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
        startActivityForResult(intent, REQUEST_CODE_ENABLE_ACCESSIBILITY);
        Button button=findViewById(R.id.b_1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Intent intent=new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
                //startActivityForResult(intent, REQUEST_CODE_ENABLE_ACCESSIBILITY);
                //Toast.makeText(getApplicationContext(), "dj", Toast.LENGTH_SHORT).show();
            }
        });
    }
    //
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_ENABLE_ACCESSIBILITY) {
            if (resultCode == RESULT_OK) {
                // 用户已启用无障碍服务,可以在这里执行相应的操作
            } else {
                // 用户未启用无障碍服务,可以提示用户开启
            }
        }
    }
}

1.软件打开时就自动跳转到去设置打开无障碍服务

每次真机调试的时候都要打开一次的不要忘了,在MainActivity加入这个就方便些

Intent intent=new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, REQUEST_CODE_ENABLE_ACCESSIBILITY);
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]