• 在配置文件frameworks/base/packages/SystemUI/res/values/config.xml下添加screenshot
[html] view plaincopy
  1. <string name="quick_setting_tiles_default" translatable="false">
  2. wifi,bt,inversion,dnd,cell,airplane,rotation,flashlight,location,cast,hotspot,screenshot
  3. </string>
  • 在frameworks/base/packages/SystemUI/src/com/android.systemui/statusbar/phone/QSTileHost.java中得到config.xml中的数据,并进行判断,在方法createTile()中添加
[java] view plaincopy
  1. else if(tileSpec.equals(“screenshot”)) return new ScreenShotTile(this);
  • 在QSTileHost.java中还需要往构造方法中传入一个ScreenShotController对象,需要添加如下内容:

    import com.mediatek.systemui.statusbar.policy.ScreenShotController;private final ScreenShotController mScreenShotController;public QSTileHost(…………ScreenShotController screenshot){
    ………….
    mScreenShotController=screenshot;
    ………….
    }public ScreenShotController getScreenShotController(){return mScreenShotController;
    }
    
  • 这里涉及到了ScreenShotController,于是我们要去定义它,ScreenShotController是一个接口,内容如下:
    package com.mediatek.systemui.statusbar.policy;public interface ScreenShotController{boolean isSupportScreenShot();
    }
    
  • 完成ScreenShotTile类,在这个方法中需要完成状态栏图标显示和截屏操作,可以参考其他生成Tile的方法来完成显示图标的方法。该类继承了QSTile类,所以要清楚QSTile这个类的内容。QSTile类中需要添加的内容如下:
    import com.mediatek.systemui.statusbar.policy.ScreenShotController;
    public interface Host{
    ……
    ScreenShotController getScreenShotController();
    …….
    }
  • ScreenShotTile类的实现如下所示:
[java] view plaincopy
  1. public class ScreenShotTile extends QSTile<QSTile.BooleanState> {
  2. private static final String TAG = "ScreenShotTile";
  3. private static final int SCREEN_SHOT_MESSAGE = 10000;
  4. private static GlobalScreenshot mScreenshot;
  5. Handler mHandler = new Handler() {
  6. public void handleMessage(Message msg) {
  7. switch (msg.what) {
  8. case TAKE_SCREEN_SHOT_MESSAGE:
  9. final Messenger callback = msg.replyTo;
  10. if (mScreenshot == null) {
  11. mScreenshot = new GlobalScreenshot(mContext);
  12. }
  13. mScreenshot.takeScreenshot(new Runnable() {
  14. @Override public void run() {
  15. Message reply = Message.obtain(null, 1);
  16. try {
  17. if(callback != null){
  18. callback.send(reply);
  19. }
  20. }catch(RemoteException e){
  21. }
  22. }
  23. }, msg.arg1 > 0, msg.arg2 > 0);
  24. break;
  25. default:
  26. break;
  27. }
  28. }
  29. };
  30. public TakeScreenShotTile(Host host) {
  31. super(host);
  32. }
  33. @Override
  34. protected BooleanState newTileState() {
  35. return new BooleanState();
  36. }
  37. @Override
  38. public void setListening(boolean listening) {
  39. }
  40. @Override
  41. protected void handleClick() {
  42. mHost.startSettingsActivity(new Intent());
  43. Message msg = mHandler.obtainMessage(SCREEN_SHOT_MESSAGE);
  44. mHandler.sendMessageDelayed(msg,1000);
  45. }
  46. @Override
  47. protected void handleLongClick() {
  48. mHost.startSettingsActivity(new Intent());
  49. Message msg = mHandler.obtainMessage(SCREEN_SHOT_MESSAGE);
  50. mHandler.sendMessageDelayed(msg,1000);
  51. }
  52. @Override
  53. protected void handleUpdateState(BooleanState state, Object arg) {
  54. state.value=false;
  55. state.autoMirrorDrawable=false;
  56. state.label = mContext.getString(R.string.screenshot);//加载字符串资源
  57. state.icon = ResourceIcon.get(R.drawable.ic_qs_screenshot);//加载图片资源}
  58. @Override
  59. public int getMetricsCategory(){
  60. return MetricsLogger.QS_SCREEN_SHOT;
  61. }
  62. }
  • 在frameworks/base/packages/SystemUI/res/中添加对应的字符串和相应分辨率下的图片资源。

1.      在frameworks/base/packages/SystemUI/res/values/strings.xml添加

[html] view plaincopy
  1. <string name=screenshot>ScreenShot</string>

2.      在frameworks/base/packages/SystemUI/res/drawable目录下新建文件ic_qs_screenshot.xml,文件内容如下:

[html] view plaincopy
  1. <vector xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:width="64dp"
  3. android:height="64dp"
  4. android:viewportWidth="48.0"
  5. android:viewportHeight="48.0"
  6. <path
  7. android:fillColor="#FFFFFFFF"
  8. android:pathData="M 48.00,0.00
  9. C 48.00,0.00 48.00,48.00 48.00,48.00
  10. 48.00,48.00 0.00,48.00 0.00,48.00
  11. 0.00,48.00 0.00,0.00 0.00,0.00
  12. 0.00,0.00 48.00,0.00 48.00,0.00 Z
  13. M 12.74,5.34
  14. C 10.77,4.60 8.82,7.07 7.61,8.31
  15. 4.18,11.82 4.05,13.40 9.00,15.00
  16. 9.00,15.00 9.00,39.00 9.00,39.00
  17. 9.00,39.00 33.00,39.00 33.00,39.00
  18. 33.44,40.36 33.66,42.07 35.26,42.66
  19. 37.23,43.40 39.18,40.93 40.39,39.69
  20. 43.82,36.18 43.95,34.60 39.00,33.00
  21. 39.00,33.00 39.00,15.00 39.00,15.00
  22. 31.35,20.68 33.00,24.31 33.00,33.00
  23. 33.00,33.00 18.00,33.00 18.00,33.00
  24. 23.35,27.65 37.10,14.14 40.00,8.00
  25. 40.00,8.00 39.00,7.00 39.00,7.00
  26. 33.12,9.79 19.63,25.36 15.00,31.00
  27. 15.00,31.00 15.00,15.00 15.00,15.00
  28. 22.33,15.00 27.29,16.58 31.00,9.00
  29. 31.00,9.00 15.00,9.00 15.00,9.00
  30. 14.56,7.64 14.34,5.93 12.74,5.34 Z"/>
  31. </vector>

这里使用了vector绘制矢量图的方式生成状态栏图标,而不是加载具体的图片资源,而path里的内容决定了图片的样式。

  • 在frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java中修改进行截屏操作的类和方法的权限,如下所示:

classGlobalScreenshot 声明为 public

method takeScreenshot 声明为public

GlobalScreenshot是实现截屏操作,图片保存,截屏动画的类.

实现截屏的操作的方法是takeScreenshot();

  • PhoneStatusBar中定义了一个QSTileHost对象,实参需要传入一个ScreensShotController对象,这里传入的是ScreensShotController的实现类ScreensShotControllerImpl的对象,修改如下

    import com.mediatek.systemui.statusbar.policy.ScreenShotControllerImpl;
    ScreenShotControllerImpl mScreenShitController;final QSTileHost qsh=new QSTileHost(.................mScreenShotController);
  • ScreenShotControllerImpl是接口ScreenShotController的实现类,内容如下:

    package com.mediatek.systemui.statusbar.policy;
    import android.content.Context;
    public class ScreenShotControllerImpl implements ScreenShotController{
    private static final String TAG="ScreenShotControllerImpl";
    private final Context mContext;
    public ScreenShotControllerImpl(Context context){
    mContext=context;
    }
    @Override
    public boolean isSupportScreenShot(){
    return ture;
    }
    }
  • QStuner中存在一个类继承了QSTileHost,同时调用了父类的构造方法,因此需要添加一个参数。

    public CustomHost(Context context){
    super(context,...............,null,null,null);
    }

    最后的那个null是这次修改添加上的。

     

android6.0在状态栏添加一键截屏相关推荐

  1. android6.0系统状态栏添加电量百分比

    1.系统状态栏添加电量百分比显示 我们要修改SystemUI这个应用,看过源码才知道,其实状态栏是分3个显示的, 锁屏的时候是一个,对应的类是KeyguardStatusBarView,它是一个Rel ...

  2. 小程序canvans一键截屏纯前端实现

    小程序canvas一键截屏,生成图片并保存,提供源码 核心代码如下,大家可以参考一下 downImg(list) {var that = thislet imglist = []let n = 0fu ...

  3. 自定义悬浮球,提供一些快捷操作。比如一键静音,一键锁频,一键截屏,一键回桌面,手电筒等

    FloatingBall 项目地址:killer8000/FloatingBall  简介:自定义悬浮球,提供一些快捷操作.比如一键静音,一键锁频,一键截屏,一键回桌面,手电筒等 更多:作者   提 ...

  4. 苹果笔记本装windows10后,如何一键截屏并保存到onedrive中?

    苹果macbook pro,为了工作方便装了win10. 前几天在开线上会的时候,有些内容需要记录下,突然发现不会使用苹果本截屏快捷键,于是用QQ截屏凑合用了. 晚上回到家,终于找到了苹果本在win1 ...

  5. Vue实现一键截屏功能

    1.安装HTMLCanvas npm install html2canvas --save 2.在需要的Vue组件中引入 import html2canvas from "html2canv ...

  6. python处理adb截屏_《自拍教程38》Python adb一键截屏

    做Android手机系统或App测试的过程中, 如果碰到了bug,开发一般会需要测试人员提供当时的bug截图, 如何用Python 批处理脚本, 快速实现截图呢? 准备阶段 adb shell scr ...

  7. python处理adb截屏_《自拍教程38》Python_adb一键截屏

    做Android手机系统或App测试的过程中, 如果碰到了bug,开发一般会需要测试人员提供当时的bug截图, 如何用Python 批处理脚本, 快速实现截图呢? 准备阶段 adb shell scr ...

  8. Vue 实现页面一键截屏功能

    1,安装所需要的包: npm i html2canvas --save //将页面内容区域转化为图片格式 2,在你的页面引入html2canvas 组件 import html2canvas from ...

  9. 基础篇——树莓派添加一键锁屏

    简介 在使用树莓派的过程中,常常会想有没有类似windows系统的WIN+L一键锁屏的操作,今天研究了一下还真有,还是内置的.简单记录分享一下. 原理介绍 修改系统桌面配置文件,重启系统即可完成 实现 ...

最新文章

  1. 中国AI已进入迷茫阶段!从技术到科学,AI该何去何从?
  2. 【Binary Tree Level Order Traversal】cpp
  3. 2021年春季学期-信号与系统-第八次作业参考答案
  4. 怎么解决svn清理失败且路径显示乱码问题
  5. Linux下的sed命令使用详解
  6. 惠普服务器年销售额,IBM和惠普去年分列服务器收入和发货量第一
  7. 如何保存QQ聊天记录
  8. mysql下载备份数据库命令行,如何从MariaDB数据库备份和还原命令行
  9. ceph架构/IO原理分析(齐全)
  10. c语言最简单程序实例,C语言第一个简单实例
  11. 嵌入式操作系统内核原理和开发(系统中断仿真)
  12. 【干货】DTC模式如何引领消费品牌企业实现创新-罗兰贝格.pdf
  13. 谈谈能带来高薪报酬的软件技术
  14. AJAX和CGI 技术的应用
  15. 晶体晶振小结(XTAL与TCXO/VCXO/VC-OCXO等)-持续更新
  16. python 根据经纬度 查地理位置
  17. 利用PyG实现社区检测经典算法ClusterNet
  18. 再次爬取干货集中营的福利图片
  19. 用 Python 整理 Excel 表格
  20. “棱镜”入侵手机App, 爱加密有效防窃听

热门文章

  1. 安防天下1——视频监控技术概述及相关基础了解
  2. 一个自动化工厂有哪些必备的配置
  3. 晓之以理——女儿被老师投诉
  4. 使用 腾讯云搭建一个个人博客
  5. postgres 通过zhparser实现全文搜索功能
  6. 百度地图API调用实现获取经纬度以及标注
  7. 深度解析:一文让你领略支付宝应用架构的厉害之处!
  8. 大话2点卡稳定服务器,大话西游2新区点卡比例增涨太快,这究竟是什么原因
  9. 在线电影订票系统 - 数据库建模
  10. ipad分屏功能怎么开启_win10怎么开启投屏功能