Android AccessibilityService无障碍服创建 与 权限判断

本文介绍了Android AccessibilityService的创建和使用,包括如何继承 AccessibilityService 类并实现接口方法,以及在AndroidManifest.xml中的配置。此外,还讲解了Log工具类的使用,包括不同级别的日志打印方法。

button 按钮的声明 与使用

	 Button button ;    声明按钮类型的 变量
     button = findViewById(R.id.button);  将Id为  button 的按钮 赋值给变量 
     button.setOnClickListener(new View.OnClickListener() {   
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"这是弹窗",Toast.LENGTH_SHORT).show();
            }
        });

textView.setText(check);

Android开发学习之Log的使用

Log(android.util.log)是Android Studio中的日志工具类,熟练使用log会对你以后的Android开发之旅有很大的帮助。

  • log类有五个方法,分别是(级别由低到高):

1.Log.v():打印一些最为繁琐、意义不大的日志信息
2.Log.d():打印一些调试信息(logd+tab)
3.Log.i():打印一些比较重要的数据,可帮助你分析用户行为数据(logi+tab)
4.Log.w():打印一些警告信息,提示程序该处可能存在的风险(logw+tab)
5.Log.e():打印程序中的错误信息(loge+tab)

Android AccessibilityService无障碍服务(一)

简介: 创建一个类AccessibilitySampleService继承自AccessibilityService,并实现其接口方法,onAccessibilityEvent与onInterrupt。

创建一个类AccessibilitySampleService继承自AccessibilityService,并实现其接口方法,onAccessibilityEvent与onInterrupt。
创建 AccessibilitySampleService.java 类文件

public class AccessibilitySampleService extends AccessibilityService {
  private static final String TAG = "AccessibilityService";
  @Override public void onAccessibilityEvent(AccessibilityEvent event) {
    Log.e(TAG, "onAccessibilityEvent: ");
  }

  @Override public void onInterrupt() {
    Log.e(TAG, "onInterrupt: ");
  }
}

在AndroidManifest.xml文件中的application节点下配置service,其中android:label="@string/accessibility_tip"是在手机的设置中要显示的文字。
打开 AndroidManifest.xml 文件 在application标签 填写 和 activity 同级

<!-- 注册辅助功能服务 -->
    <service
        android:name=".AccessibilitySampleService"
        android:enabled="true"
        android:exported="true"
        android:label="@string/accessibility_tip"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
        android:process=":BackgroundService">
      <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
      </intent-filter>
      <!-- 通过xml文件完成辅助功能相关配置,也可以在onServiceConnected中动态配置 -->
      <meta-data
          android:name="android.accessibilityservice"
          android:resource="@xml/accessibility_config" />
    </service>

打开 res 下 values 下的 strings.xml
文件内容 这里是存放 String 数据的 独立文件 ,方法后期维护

  <string name="accessibility_tip">开启辅助功能Sample</string>
  <string name="accessibility_desc">开启辅助功能,让你的手机更智能一点</string>

AndroidManifest.xml中的配置无障碍服务时在service节点下的meta-data中android:resource="@xml/accessibility_config"的文件内容如下:
在res文件夹下 添加 xml文件 并且创建service 配置文件 accessibility_config.xml

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:canRetrieveWindowContent="true"
    android:description="@string/accessibility_desc"
    android:notificationTimeout="100" />

其中:
android:canRetrieveWindowContent=“true"获取窗口内容,android:description=”@string/accessibility_desc" 为详细描述,android:notificationTimeout=“100” 通知互动。配置完成之后,运行项目,可在Android手机的设置->更多设置->无障碍->服务下看到“开启辅助功能Sample”。

Android AccessibilityService无障碍服务(二)

创建一个类文件 OpenAccessibilitySettingHelper 后面好引用

/**
 * 开启无障碍服务帮助类
 * Created by mazaiting on 2017/8/18.
 */
public class OpenAccessibilitySettingHelper {

  /**
   * 跳转到无障碍服务设置页面
   * @param context 设备上下文
   */
  public static void jumpToSettingPage(Context context){
    Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
  }

  /**
   * 判断是否有辅助功能权限
   * @return true 已开启
   *          false 未开启
   */
  public static boolean isAccessibilitySettingsOn(Context context,String className){
    if (context == null){
      return false;
    }
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningServiceInfo> runningServices =
        activityManager.getRunningServices(100);// 获取正在运行的服务列表
    if (runningServices.size()<0){
      return false;
    }
    for (int i=0;i<runningServices.size();i++){
      ComponentName service = runningServices.get(i).service;
      if (service.getClassName().equals(className)){
        return true;
      }
    }
    return false;
  }
}

在你的 MainActivity.java 中 的声明周期中 执行代码
也可以 卸载 函数中,,调用

if (!OpenAccessibilitySettingHelper.isAccessibilitySettingsOn(this,
            AccessibilitySampleService.class.getName())){// 判断服务是否开启
          OpenAccessibilitySettingHelper.jumpToSettingPage(this);// 跳转到开启页面
        }else {
          Toast.makeText(this, "服务已开启", Toast.LENGTH_SHORT).show();
        }

我的 MainActivity.java 用函数封装起来了

package com.example.accessibilityservice22;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.example.accessibilityservice22.R;

public class MainActivity extends AppCompatActivity {
    Button button ;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button =findViewById(R.id.button);
        textView = findViewById(R.id.textView);

    }

    @Override
    protected void onResume() {
        super.onResume();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                check();
            }
        });

    }

    public void check () {
        if (!OpenAccessibilitySettingHelper.isAccessibilitySettingsOn(this,
                AccessibilitySampleService.class.getName())) {// 判断服务是否开启
            OpenAccessibilitySettingHelper.jumpToSettingPage(this);// 跳转到开启页面

         
        } else {
            Toast.makeText(this, "服务已开启", Toast.LENGTH_SHORT).show();
        }
      
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值