在网上有很多的文章,但是他们或多或少都有自己的问题,有的是版本太老了现在已经用不了,所以决定自己写一个

一.QS是什么

SystemUI分为很多的部分,底部导航栏以及手机上方的顶部状态栏或者下拉状态栏快捷设置都是属于SystemUI,在SystemUI中,有一个qs文件夹,里面存放的是下拉快捷栏的相关文件,用来管理设置,qs是quick setting的缩写,对于一些进入比较繁琐的功能,我们可以把它设置在qs中简化用户的操作,优化用户体验

二.更改过程

1.config.xml

framework/base/packages/SystemUI/res/values/config//更改路径

在config文件中分别有以下两个字段,他们代表着不同的作用,只有在这里添加了才会最终可以显示出来

字段 描述
quick_settings_tiles_default 代表当前前台显示的快捷设置选项
quick_settings_tiles_stock 代表当前库存后台可选的快捷设置选项

所以我们在两个字段中,都加入自己想要的内容,如果只更改上面字段而不更改下面这一个的话,移除后就不能重新添加了,所以我们在这里把两个都加上去,最后两个都是本人添加的

<?xml version="1.0" encoding="utf-8"?>
<resources><!-- The default tiles to display in QuickSettings --><string name="quick_settings_tiles_default" translatable="false">wifi,singlehand,bt,dnd,volte1,volte2,vowifi,lte1,lte2,flashlight,rotation,custom(com.google.android.gms/.nearby.sharing.SharingTileService),battery,cell,airplane,cast,screenrecord,dataswitch,tocamera,autobrightness</string><!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" --><string name="quick_settings_tiles_stock" translatable="false">wifi,cell,battery,dnd,volte1,volte2,vowifi,lte1,lte2,flashlight,rotation,custom(com.google.android.gms/.nearby.sharing.SharingTileService),bt,airplane,location,hotspot,inversion,saver,dark,work,cast,night,screenrecord,reverse,singlehand,longscreenshot,superbattery,dataswitch,tocamera,autobrightness</string>
</resources>

注意,如果你的手机厂商有进行定制,那么要在vendor下的overlay文件夹中去寻找同路径同名的文件去进行更改,否则会出现更改完了但是失败的情况。

2.Tocamera(编写自己想要添加的类)

com.android.systemui.qs.tiles.ToCameraTile//添加路径

这一块没啥好说的,里面都是一些重写的类,根据名字去判断意思

package com.android.systemui.qs.tiles;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.service.quicksettings.Tile;
import android.sysprop.TelephonyProperties;
import android.telephony.TelephonyManager;
import android.widget.Switch;
import android.widget.Toast;
import android.provider.MediaStore;import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.qs.GlobalSetting;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.tileimpl.QSTileImpl;import javax.inject.Inject;/** Quick settings tile: Airplane mode **/
public class ToCameraTile extends QSTileImpl<BooleanState> {@Injectpublic ToCameraTile(QSHost host){super(host);}@Overridepublic BooleanState newTileState() {return new BooleanState();}@Overrideprotected void handleClick() {Toast.makeText(mContext,"Camera Click",Toast.LENGTH_LONG).show();}@Overrideprotected void handleUpdateState(BooleanState state, Object arg) {state.label = mContext.getString(R.string.quick_settings_camera_label);//定义图标state.icon = ResourceIcon.get(R.drawable.ic_camera);}protected void handleLongClick(){Toast.makeText(mContext,"CameraLongClick",Toast.LENGTH_LONG).show();}@Overridepublic int getMetricsCategory() {return MetricsEvent.QS_CAMERA;}@Overridepublic Intent getLongClickIntent() {return new Intent(MediaStore.ACTION_IMAGE_CAPTURE);}@Overrideprotected void handleSetListening(boolean listening) {}@Overridepublic CharSequence getTileLabel() {return mContext.getString(R.string.quick_settings_camera_label);}}

这里面导的包有一些并没有用到,是从别的类复制过来的,所以没有进行更改,大家根据自己实际需要去进行导包

注意事项

1.必须要重写父类的抽象方法
2.构造方法上面要加上注释@Inject
3.点击方法与长按的实现是父类中带handle的那一个
4.记得导包
5.getMetricsCategory()这个方法中的返回值定义在metrics_constants.proto文件中

这里只是去添加一个qs,没有功能的实现!!!
如果要写一些功能,可以自行添加

3.metrics_constants.proto

//自己添加
QS_CAMERA = 5869;

4.QSFactoryImpl

这里只有两个地方要添加,模仿其他的就可以了,更容易漏掉的事情是导包

//添加@InjectProvider<ToCameraTile> mToCameraTileProvider;......private QSTileImpl createTileInternal(String tileSpec) {// Stock tiles.switch (tileSpec) {...case "tocamera":return mToCameraTileProvider.get();...

结尾

到这里整个步骤就完成了,接下来进行刷机验证

Android11进行下拉快捷功能qs的增加相关推荐

  1. android加载时二级联动点击二级联动,Android实现联动下拉框二级地市联动下拉框功能...

    日常使用软件中,为了方便且规范输入,会使用到下拉框进行输入,如注册时生日选项,购物时的地址输入,都会用到下拉框,今日笔者为了巩固已学的知识,实现了二级联动下拉框用作回顾及分享给求知的新手. 思路/步骤 ...

  2. Android m 自定义下拉菜单,Android实现动画效果的自定义下拉菜单功能

    我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...

  3. HTML下拉菜单去掉点,jQuery点击页面其他部分隐藏下拉菜单功能

    一.开发小要点 web页面中,我们一般不用select.option来实现下拉菜单效果,因为下拉框的样式丑且难以美化,所以我们选择控制ul显示隐藏来实现同样且高大上的效果,但是不能像下拉框那样点击页面 ...

  4. Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最 近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在 ...

  5. mysql写下拉树_PHP+mysql实现从数据库获取下拉树功能的方法

    这篇文章主要介绍了PHP+mysql实现从数据库获取下拉树功能,结合实例形式分析了php+mysql数据库查询及select下拉框输出查询结果的实现技巧,需要的朋友可以参考下 本文实例讲述了PHP+m ...

  6. Android ListView 疯狂之旅 之 《自定义下拉刷新功能的ListView》

    效果图: 一 首先创建一个类,继承ListView,编写其构造方法 public class RefreshListView extends ListView {public RefreshListV ...

  7. angular下拉框点击无反应_angular 实现 下拉菜单 的 点击其他区域关闭下拉菜单功能?...

    代码如图, 点击 div.selected 的时候 ul.dorpdown-list 就会显示 点击 li 的时候 ul收起 并且 赋值给selectedVal 现在还有个需求是 点击dorpDown ...

  8. php 点击下拉显示内容,php+ajax实现仿百度查询下拉内容功能示例

    本文实例讲述了php+ajax实现仿百度查询下拉内容功能.分享给大家供大家参考,具体如下: 运行效果如下: html代码: Document body{ margin:0; padding: 0; } ...

  9. 仿新浪微博的ListView下拉更新功能

    由于最近做的项目中也用到了这个功能,今天刚好实现了下,就趁现在有时间写篇博客分享下.在做的时候也参考了下别人的代码,毕竟站在巨人的肩膀上才会是自己更加强大.哈哈!先看看新浪的下拉更新是什么样的吧! O ...

最新文章

  1. LeetCode - 28. Implement strStr()
  2. Codeforces Round #321 (Div. 2) E
  3. 引入JQuery提示:Uncaught ReferenceError: $ is not defined
  4. 老虎Sitemap生成器 0.3
  5. 云计算实战系列二(Linux-用户管理)
  6. python中如何获取类的属性,python – 获取类的属性
  7. 我们每个人都想在事业上获得成功,但做到的人往往凤毛麟角
  8. soapui使用教程2-属性与脚本
  9. 华氏温度转摄氏温度c语言作业,C语言摄氏度互相转换华氏
  10. 工作中个人注册的媒体账号离职要归公司所有?
  11. VR系列--VR介绍
  12. 临沂中考计算机试题,2017临沂中考信息技术题库带答案
  13. windows 远程连接 快捷键
  14. CAD梦想画图中的“绘图工具——点”
  15. 返利营销平台案例简略分析
  16. 基于遗传算法的二进制图像重建附Matlab代码
  17. 全球工业网络安全收入预计2028年达到244.7亿美元
  18. 租房变欠贷?这“租金贷”连法院工作人员都被套路了
  19. 以可信度加权的方式做决定
  20. 混合模式:mix-blend-mode: difference

热门文章

  1. 为何律师事务所需要企业内容管理和电邮管理?
  2. 工业领域常用的全数字无线加密通讯产品盘点
  3. 蒙特卡洛计算亚式期权以及希腊字母计算
  4. 计算机应用软件专业自学怎么学,自学考试计算机及应用专业应该怎么学
  5. 基于布里渊散射的光纤温度和应变快速感知
  6. NodeMCU篇-(三)用arduino的方式
  7. 体绘制(Volume Rendering)概述
  8. 讯飞语音合成 发音不准确怎么解决
  9. memoQ Webinar(9.4新版本功能)分享会回顾
  10. 广西农业大数据在管用上做文章