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