功能介绍

安装v2rayNg后,android的快捷设置中会有一个快捷开关,以前添加开关都是在SystemUI里面处理的,对于三方应用,SystemUI不能可能事先内置,只可能是SystemUI提供的接口,让开发者能够在SystemUi里面添加这个开关.在android的setting的开发者模式中,有一个Quick setting developer tiles选项,里面有多个调试的开关,打开他们,在SystemUI里面也会出现新的开关,可见Systemui早就提供了相应的接口.这个功能在原生android 8 和 android 9上是有的

功能实现

跟以前动态壁纸一样,这种跨进程的接口一般都是通过服务实现的.实现三方快捷开关的服务类是TileService.java
定义AndroidManinfest.xml

<serviceandroid:name=".QsControlService"android:enabled="true"android:icon="@drawable/ic_launcher_foreground"android:label="@string/app_name"android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"><intent-filter><action android:name="android.service.quicksettings.action.QS_TILE" /></intent-filter></service>

如果 android:enabled=“true”,表示可以实例化,否则需要通过packagemanager在代码中enable.

定义实现类


import android.content.Intent;
import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.util.Log;public class QsControlService extends TileService {private static final String TAG = "QsControlService";@Overridepublic void onStartListening() {super.onStartListening();refresh();}public void refresh() {final int state;state = Tile.STATE_ACTIVE;getQsTile().setState(state);getQsTile().updateTile();}@Overridepublic void onClick() {Log.i(TAG, "onClick");//没有mHost对象,不知道怎么卷起通知栏;mHost.collapsePanels();Intent intent = new Intent(this, MainActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);refresh();}
}

虽然实现类是一个服务,但是不需要启动它.定义好之后,定义上面两处代码就直接会在SystemUI快捷设置下的编辑区域找到它了.

显示控制(一般不用)
如果需要在用户执行某个操作之后才让快捷开关显示在SystemUI里面,需要在AndroidManinfest.xml中设置该service的enbale为false

android:enabled=“false”

        <serviceandroid:name=".DevelopmentTiles$ShowLayout"android:enabled="false"android:icon="@drawable/tile_icon_show_layout"android:label="@string/debug_layout"android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"><intent-filter><action android:name="android.service.quicksettings.action.QS_TILE" /></intent-filter></service>

然后在代码里面控制

//查找定义的那个Service,得到serviceinfo
List<ResolveInfo> resolveInfos = mPackageManager.queryIntentServices(intent,PackageManager.MATCH_DISABLED_COMPONENTS);
ServiceInfo sInfo = resolveInfos.get(0).serviceInfo;
//激活或失之失效这个service
ComponentName componentName = new ComponentName(PackageName, sInfo.name);mPackageManager.setComponentEnabledSetting(componentName, enabled? PackageManager.COMPONENT_ENABLED_STATE_ENABLED: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);

SystemUI添加图标
SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java的addPackageTiles方法添加三方快捷开关.如果应用卸载后,会在SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java删除快捷图标.

1.有一点问题:TilesService无法获取TilesHost对象,这个对象可以卷起SystemUI的通知栏,SytstemUI就是利用它,
2.部分手机显示出快捷设置无法点击,不清楚什么原因,在小米,联想上是可以的,可能这个功能不常用,所以有点厂商没有验证好自己的软件.

三方应用如何在SystemUI快捷设置中添加快捷开关相关推荐

  1. 如何在github存储库中添加屏幕截图到README?

    本文翻译自:How to add screenshot to READMEs in github repository? Is it possible to place a screenshot in ...

  2. ubuntu添加路由_如何在Ubuntu,Linux中添加新路由?

    ubuntu添加路由 I have a box with Ubuntu Linux and I want to add a new route to my box. Because I want to ...

  3. 如何在ppt或word中添加高亮代码?

    如何在ppt或word中添加高亮代码? 问题: 如何ppt中添加带有语法高亮的程序代码,就如同下面的形式(在ppt嵌入高亮代码,且可以编辑,带有行号) 详细的要求如下: 1.代码带有语法高亮. 2.结 ...

  4. 如何在 Cell 组件/插件中添加下拉树形控件

    引言 用友华表Cell控件在提供强大的报表功能的同时,在关键细节也是十分突出,为开发者进一步缩短开发周期和最终用 户的完美需求提供了有效有利的平台.下面的例子提供了VB语言对实现美观实用的下拉树形控件 ...

  5. 如何在Linux kernel Makefile中添加宏定义

    如何在Linux kernel Makefile中添加宏定义: CFLAGS_object.o += -DMACRO_NAME 在编译object.o时定义宏MACRO_NAME,在kernel中添加 ...

  6. 如何在Adobe DW CC2017中添加服务器行为、数据库和绑定面板

    如何在Adobe DW CC2017中添加服务器行为.数据库和绑定面板 如何给dw cc2017安装插件. 1.安装DMXzone Extension Manager. https://pan.bai ...

  7. access数据库中怎么添加计算机,如何在Access 2007数据库中添加附件 -电脑资料

    Access允许您在数据库表中包含附件, 1. 首先使用Access 2007打开Access数据库. 2. 在"设计视图"中打开您想要添加附件的表. 3. 在"字段名称 ...

  8. Android如何在账户设置中添加App的账户

    Android系统为外部服务提供了账号登录的机制,用于同步数据等作用. 进入设置->账户->添加账户,即可看到目前手机上有哪些App提供了同步服务. 接下来将会演示如何在App中定义登录服 ...

  9. 符号在excel中的引用_如何在Excel工作表中添加表情符号

    &符号在excel中的引用 In the old days, we typed emoticons in our messages, to show a grin, or wink, etc. ...

  10. 【制作多媒体演示文稿软件】Focusky教程 | 如何在focusky演示文稿中添加音乐?

    在Focusky(也称为"FS软件")演示文稿中添加音乐非常便捷,有以下两种方法: 方法一:添加本地音乐 单击工具栏上的"插入", 在下拉栏中选择"音 ...

最新文章

  1. dubbo yml配置_利用springboot+dubbo,构建分布式微服务,全程注解开发(一)
  2. AngularJS DEMO - 不断更新中
  3. 什么是跨域,什么是同源
  4. 利用邻接表完成图的BFS和DFS
  5. 扫描线算法-求线段交点数量
  6. linux 安装库 编译提示-lcrypto 无法链接,缺少 crypto 库
  7. 大小端、位段和内存对齐
  8. informatica数据脱敏_助您首个大数据项目破茧成蝶的实践指南
  9. 产品经理如何进行竞品分析?
  10. spark 转换算子应用举例
  11. 使用Hibernate
  12. VC++ EasyPR车牌识别
  13. cox生存分析-从基本概念到参数求解
  14. 最适合晚上睡不着看的 7 个网站,建议收藏哦
  15. pytorch的两个函数 .detach() .detach_() 的作用和区别
  16. html实训QQ音乐官网首页制作
  17. 计算机网络基础总结(超全)
  18. U-BOOT小全(一)
  19. 图书速读 | 一分钟读完《学会如何学习》
  20. Mac 最好的网页视频下载工具

热门文章

  1. 怎样提高睡眠质量容易入睡,五种应对失眠的妙招
  2. IP地址、子网掩码、网关地址和MAC地址
  3. 【深度学习】CNN+Transformer汇总
  4. 用计算机术语写毕业寄语,大学毕业寄语(精选50句)
  5. Linux 命令(184)—— at 命令
  6. Mac将本地文件上传到服务器以及从服务器下载文件到本地
  7. 【读书笔记】《谈谈方法》(笛卡尔)
  8. 第114课:SparkStreaming+Kafka+Spark SQL+TopN+Mysql+KafkaOffsetMonitor电商广告点击综合案例实战(详细内幕版本)
  9. 我干区块链这一月,见证从风口到“枪口”
  10. frp内网穿透疑难杂症【1】do http proxy request [host:www.xxx.xxx] error: no root found: www.xxx.xxx