美文网首页
[Android]模拟长按电源按钮打开关机对话框

[Android]模拟长按电源按钮打开关机对话框

作者: 黑森林中的小木屋 | 来源:发表于2018-08-02 16:15 被阅读0次

这个用到了一个名叫AccessibilityService的类,这个类是安卓用于开发辅助功能的类。
网上找到一篇文章,对这个类介绍比较详细
android AccessibilityService解析

这里只谈一下如何使用,可以用代码打开关机对话框。对这个类感兴趣的可以看上面那篇文章

首先创建一个Service继承AccessibilityService,需要注意的是在AndroidManifest.xml文件中,需要为这个服务添加android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"

<intent-filter>
         <action android:name="android.accessibilityservice.AccessibilityService" />
  </intent-filter>

示例:

<service
     android:name=".PerformSystemService"
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
      <intent-filter>
          <action android:name="android.accessibilityservice.AccessibilityService" />
      </intent-filter>
  </service>

在合适的地方检查权限(此段代码摘自应用《甜甜圈》):

public boolean isAccessibilitySettingsOn() {
        int accessibilityEnabled = 0;
        final String service = "你的包名/你的服务的完整地址";
        boolean accessibilityFound = false;
        try {
            accessibilityEnabled = Settings.Secure.getInt(getApplicationContext().getContentResolver(),
                    Settings.Secure.ACCESSIBILITY_ENABLED);
        } catch (Settings.SettingNotFoundException e) {
        }
        TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':');

        if (accessibilityEnabled == 1) {

            String settingValue = Settings.Secure.getString(getApplicationContext().getContentResolver(),
                    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
            if (settingValue != null) {
                TextUtils.SimpleStringSplitter splitter = mStringColonSplitter;
                splitter.setString(settingValue);
                while (splitter.hasNext()) {
                    String accessabilityService = splitter.next();
                    if (accessabilityService.equalsIgnoreCase(service)) {
                        return true;
                    }
                }
            }
        }

        return accessibilityFound;
    }

然后如果没有权限的话,跳转到设置中提示用户开启:

 Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                startActivity(intent);

最后在你的服务里执行这局代码就OK了
performGlobalAction(AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);

最后附上《甜甜圈》的APK源码

相关文章

  • [Android]模拟长按电源按钮打开关机对话框

    这个用到了一个名叫AccessibilityService的类,这个类是安卓用于开发辅助功能的类。网上找到一篇文章...

  • Android系统的启动流程

    Android系统的启动,主要是指Android手机关机后,长按电源键后,Android手机开机的过程。从系统角度...

  • 4.1号学习日记

    开关机程序: 开机:打开机床主电源,开启操作面板电源按钮,旋开机床急停开关,再执行回零操作。 关机:拍下急停开关...

  • 一体机培训(2017年9月6日,记录者:风铃)

    一、开关机操作 先保证电源开通,按一下电源键开机。关机类似台式电脑或笔记本电脑关机,再长按关机键看到电源显示红色即...

  • Android系统 init--> zygote-->

    Android系统启动过程大概可以分为5步: Loader Boot ROM: 当手机处于关机状态时,长按电源键开...

  • Windows 10 进入安全模式方法

    终极方法: 1、开机进入系统时(转圈时)长按电源键关机(台式机直接按重启按钮),重复3次左右; 2、这样开机后应该...

  • iPhone的常用操作

    1.强制关机Home键➕电源键,长按至屏幕变黑。

  • 2018-01-22电脑强制关机对电脑有什么影响

    摘要:电脑关机你是这样操作的吗?直接强制关机,拔掉电源。 嫌挨个关闭程序麻烦,索性直接长按电源键,进行强制关机。当...

  • Android面试简录——对话框、信息提示和菜单

    * 对话框 Android的标准对话框最多可以有几个按钮,并写出显示对话框按钮的方法。标准对话框——AlertDi...

  • 她长按电源键,按下了第一个红色按钮——关机。 这是第一次,对她发脾气,以往无论她怎么闹,总会去包容。可这一次...

网友评论

      本文标题:[Android]模拟长按电源按钮打开关机对话框

      本文链接:https://www.haomeiwen.com/subject/tycsvftx.html