无障碍服务(一)

最近研究了下无障碍服务,属于初入阶段吧,整理下心得。

在Android无障碍功能中,可以启动无障碍服务以此来监控进程的使用情况,通过启动的包名进行管理监控。

 

首先先记录下如何使用无障碍服务:

1.      AndroidManifest中进行相应的配置:

<service
    android:name=".MyService"
    android:enabled="true"
    android:exported="true"
    android:label="myService"
           android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
    android:process=":BackgroundService">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name = "android.accessibilityservice"
        android:resource = "@xml/accessibility_service_config"  /> 
</service>

 

2.      xml文件配置,在xml文件夹下创建accessibility_service_config文件

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
    xmlns:android=http://schemas.android.com/apk/res/android
   //在服务启动界面,用来描述此服务作用的文字说明
    android:description="@string/app_accessibility_description"
   //服务监控事件类型
    android:accessibilityEventTypes="typeAllMask"
   //服务监控后反馈的类型
    android:accessibilityFeedbackType="feedbackAllMask"
   //监控的包名,此项可不在xml文件中进行设置,可在代码中进行动态设置,
或在代码中也没设置的情况下可对所有包名进行监控
    android:packageNames="com.android.settings"
   //在服务启动界面有个设置按钮,点击后跳转到的Activity
    android:settingsActivity="com.wantjoin.parentcontroller.MainActivity"
   //发送2次事件的时间间隔,超过后事件作废
    android:notificationTimeout="100"
//此服务是否可监听窗口内容
    android:canRetrieveWindowContent="true"  />

 

3.      创建自定义服务MyService继承AccessibilityService实现其抽象方法:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    //监控xml设置或代码设置AccessibilityServiceInfo的进程事件
    //在此方法中进行控制管理
    //for example:
    if (event.getPackageName().equals("com.android.settings")) {
        Intent intent= new Intent(Intent.ACTION_MAIN);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //如果是服务里调用,必须加入new task标识
        intent.addCategory(Intent.CATEGORY_HOME);
        startActivity(intent);
        startActivity(new    Intent(MyService.this,MainActivity.class));
    }

}

@Override
public void onInterrupt() {
    //服务中断时调用
}

4.      可重写onServiceConnected()方法进行代码设置xml配置内容

@Override
protected void onServiceConnected() {
        AccessibilityServiceInfo serviceInfo = new AccessibilityServiceInfo();
        serviceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
        serviceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; 
        //在配置文件和此处都不进行监控包名设置的话,可以对所有包进行监控。
        serviceInfo.packageNames = new String[]{"com.android.settings","com.wantjoin.parentcontroller"};
        serviceInfo.notificationTimeout=100;
        setServiceInfo(serviceInfo);
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值