当前位置: 首页 > news >正文

响应式外贸网站案例怎样制作免费的网站

响应式外贸网站案例,怎样制作免费的网站,浙江省住建厅证书查询,中国卫生人才网官网原理: 通过监听窗口改变事件,监听目标应用,通过视图ID(或文本、或描述、或其他如坐标之类的)找到目标视图,使用无障碍动作点击方法点击它 无障碍服务实现: 1、写一个自己的无障碍服务继承Acc…

原理:

通过监听窗口改变事件,监听目标应用,通过视图ID(或文本、或描述、或其他如坐标之类的)找到目标视图,使用无障碍动作点击方法点击它

无障碍服务实现:

1、写一个自己的无障碍服务继承AccessibilityService

public class AppWindowChangeService extends AccessibilityService {private static final String TAG = "MyAppWindowChangeService";@Overridepublic void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {if (accessibilityEvent == null || accessibilityEvent.getPackageName() == null) return;CharSequence packageName = accessibilityEvent.getPackageName();CharSequence className = accessibilityEvent.getClassName();//监听当前窗口变化,获取Packageif(accessibilityEvent.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){Log.i(TAG, "onAccessibilityEvent: packageName = "+packageName+", className = "+className);} }@Overridepublic void onInterrupt() {Log.e(TAG, "onInterrupt");}}

2、AndroidManifest.xml声明这个服务:

<serviceandroid:name=".AppWindowChangeService"android:configChanges="keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenSize|screenLayout|smallestScreenSize|fontScale|locale|uiMode"android:enabled="true"android:exported="false"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"><intent-filter><action android:name="android.accessibilityservice.AccessibilityService"/></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/detection_service_config"/></service>

3、在xml新建一个配置资源,做这个无障碍服务的相关配置:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-servicexmlns:android="http://schemas.android.com/apk/res/android"android:accessibilityEventTypes="typeWindowStateChanged|typeViewClicked"android:accessibilityFeedbackType="feedbackGeneric"android:canRetrieveWindowContent="true"android:accessibilityFlags="flagIncludeNotImportantViews|flagReportViewIds|flagRetrieveInteractiveWindows" />

这里监听类型我还多加了一个typeViewClicked,后面可以用来找你点击的view的相关信息。

启用功能:

自行找到系统设置的无障碍服务功能界面,或者使用代码做跳转到无障碍服务界面:

Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);intent.setPackage("com.android.settings");startActivity(intent);

开启自己app的无障碍服务开关,无障碍服务就会启动起来了。

实践:

举个栗子,监听美团外卖启动页的广告的跳过按钮:

import android.accessibilityservice.AccessibilityService;
import android.os.Handler;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Toast;public class AppWindowChangeService extends AccessibilityService {private static final String TAG = "MyAppWindowChangeService";private static final String TARGET_PACKAGE_NAME = "com.sankuai.meituan.takeoutnew";private static final String TARGET_VIEW_ID = "com.sankuai.meituan.takeoutnew:id/ll_skip";private final Runnable runnable = this::findAndClickTargetView;private final Handler handler = new Handler();@Overridepublic void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {if (accessibilityEvent == null || accessibilityEvent.getPackageName() == null) return;CharSequence packageName = accessibilityEvent.getPackageName();CharSequence className = accessibilityEvent.getClassName();//监听当前窗口变化,获取Packageif(accessibilityEvent.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){if (TARGET_PACKAGE_NAME.equals(packageName)) {Log.i(TAG, "Target package opened: " + packageName);// 查找并点击目标视图handler.removeCallbacks(runnable);handler.postDelayed(runnable, 200);}} else if (accessibilityEvent.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED) {Log.i(TAG, "onAccessibilityEvent: packageName = "+packageName+", className = "+className);Log.e(TAG, "onAccessibilityEvent: 点击view:" + className);AccessibilityNodeInfo source = accessibilityEvent.getSource();if (source != null) {String viewId = source.getViewIdResourceName();CharSequence text = source.getText();CharSequence contentDescription = source.getContentDescription();Log.e(TAG, "View ID: " + viewId);Log.e(TAG, "Text: " + text);Log.e(TAG, "Content Description: " + contentDescription);source.recycle(); // 释放资源}}}private void findAndClickTargetView() {AccessibilityNodeInfo rootNode = getRootInActiveWindow();Log.i(TAG, "findAndClickTargetView: rootNode == " + rootNode);if (rootNode != null) {AccessibilityNodeInfo targetNode = findNodeById(rootNode, TARGET_VIEW_ID);Log.i(TAG, "findNodeById: targetNode = "+targetNode);if (targetNode != null) {Log.i(TAG, "targetNode != null, start click");performClick(targetNode);targetNode.recycle();}rootNode.recycle();}}private AccessibilityNodeInfo findNodeById(AccessibilityNodeInfo rootNode, String viewId) {if (rootNode.getViewIdResourceName() != null && rootNode.getViewIdResourceName().equals(viewId)) {return AccessibilityNodeInfo.obtain(rootNode);}for (int i = 0; i < rootNode.getChildCount(); i++) {AccessibilityNodeInfo childNode = rootNode.getChild(i);if (childNode != null) {AccessibilityNodeInfo result = findNodeById(childNode, viewId);if (result != null) {return result;}childNode.recycle();}}return null;}private void performClick(AccessibilityNodeInfo node) {if (node != null && node.isClickable()) {node.performAction(AccessibilityNodeInfo.ACTION_CLICK);Log.i(TAG, "Clicked on node: " + node);Toast.makeText(this, "自动点击", Toast.LENGTH_SHORT).show();} else {Log.i(TAG, "Node is not clickable: " + node);}}@Overridepublic void onInterrupt() {Log.e(TAG, "onInterrupt");}}

目标包名和目标viewID是我通过点击的时候输出打印看到的,给他倒推回去记录到代码当中。

查找view的动作需要做延时获取,实测马上去获取是获取不到的。

实际实现中,可以记录多个包名,以及对应的需要点击的视图,做李跳跳的效果。

Android高版本注意:如果打开其他App之后日志不打印,回到自己应用之后才会一次性把之前的动作日志打印出来的情况需要将应用的省电策略改为无限制!!!这个问题网上都没有提到,之前一直不生效困扰了我好久。

http://www.yayakq.cn/news/656014/

相关文章:

  • 网站建设运营公众号运营合同邯郸注册公司流程和费用
  • 镇江建设网站公司网站建设案例精粹 电子书
  • 自己怎样做网站平台怎样找家做网站的公司
  • 永州内部网站建设公司软件著作权申请费用
  • 如何查询网站使用什么框架做的wordpress 邮件设置
  • you物公馆网站建设wordpress的模板文件
  • 网站备案主办单位错误怎么做网站推广软件
  • 国际网站模板重庆建设工程信息网官网安全监督信息
  • 公司网站建设费用计入什么科目狼雨的seo教程
  • 网站建设 意识形态那个网站做视频没有水印
  • 网站制作成都海口专业做网站
  • 奥联网站建设wordpress gstatic
  • 网站建设的业务好做吗wordpress调用文章第一张图片
  • 官方网站建设实训心得网站漂浮代码
  • 《语文建设》网站制作网页一般需要兼容哪些网站
  • 专业外贸制作网站承德项目网
  • 南宁码科网站建设如何把网站转换成wap站点
  • 中国小康建设网 是个什么网站网站的开发与设计
  • 网站 建设需要提供哪些资料广州外贸网站设计
  • 便宜建站空间网站建设亿码酷专注
  • 开发平台网站多少钱比较好的wordpress插件
  • 怎么做视频网站首页网站后台不能上传图片
  • 点击一个网站跳转到图片怎么做其它类型的定制营销型网站
  • 网站开发工作前景网站建设手机端
  • 网站设计的布局网站流量图怎么做
  • 企业门户网站的主要论点及写作体会怎么写网站建设后台有哪些项目
  • 网站建设项目概况合肥专业做网站建设内容
  • 微信网站制作软件免费二维码制作网站
  • 实体店做团购有那些网站git wordpress中文免费主题
  • 大学网站建设方案怎样做代刷网站