Android7.0 添加快速设定Quick Settings Tile

Android7.0新推出了一个非常实用的功能——添加快速设定(或者翻译成快速设置),但是感觉社区里关注的人比较少,可能目前为止国内还没有Android7.0的手机,但是越早接触越好,甚至可以告诉产品经理7.0以上可以实现此功能,从而让公司的产品更加与时俱进。

“快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。在Android 7.0以后任何应用都可以在下拉菜单中添加自己的快速设定,从而让程序更加灵活方便。

对于用户来讲:
Google工程师为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。 我们还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。

对于开发者,Android 7.0 还添加了一个新的 API,从而让您可以定义自己的“快速设置”图块,使用户可以轻松访问您应用中的关键控件和操作。

添加快速设定实现方式

我们重点来看看如何实现快速设定。

首先需要创建一个类继承 TileService,这是一个特殊的服务,这个TileService是7.0 SDK新加的,所以务必SDK更新到7.0,这个服务不需要程序开启,系统默认能够识别,并调用,所以在低版本上运行这个程序也不会有问题。

可以实现几个生命周期相关的函数,也可以选择实现

public class QuickSettingService extends TileService{
    //当用户从Edit栏添加到快速设定中调用
    @Override
    public void onTileAdded() {
        Log.d(LOG_TAG, "onTileAdded");
    }
    //当用户从快速设定栏中移除的时候调用
    @Override
    public void onTileRemoved() {
        Log.d(LOG_TAG, "onTileRemoved");
    }
    // 点击的时候
    @Override
    public void onClick() {
        Log.d(LOG_TAG, "onClick");
    }
    // 打开下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
    //在TleAdded之后会调用一次
    @Override
    public void onStartListening () {
        Log.d(LOG_TAG, "onStartListening");
    }
    // 关闭下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
    // 在onTileRemoved移除之前也会调用移除
    @Override
    public void onStopListening () {
        Log.d(LOG_TAG, "onStopListening");
    }

}

因为这个类本身就是服务, 需要配置在清单文件AndroidManifest.xml中

<application
     ...>
  ...
  <service android:name=".QuickSettingService"
       android:label="快速设定"
       android:icon="@drawable/ic_videocam"
       android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
        <intent-filter>
              <action android:name="android.service.quicksettings.action.QS_TILE"/>
          </intent-filter>
   </service>
</application>

从上面的声明中,其实已经比较明显,这个Tile要显示的名字,icon等都是在这里声明的,系统UI直接就可以查询到,特别注意这里一定要加上对应的permission才行。

接下来运行程序,就可以在下拉菜单的编辑栏中看到我们的图标,可以拖拽到上面的一栏就会在快速设定中


有了显示,还需要有具体功能,这时候一般都通过设置按钮实现了。
直接上完整代码了:

//继承TileService
public class QuickSettingService extends TileService{
    private final int STATE_OFF = 0;
    private final int STATE_ON = 1;
    private final String LOG_TAG = "QuickSettingService";
    private int toggleState = STATE_ON;
    //当用户从Edit栏添加到快速设定中调用
    @Override
    public void onTileAdded() {
        Log.d(LOG_TAG, "onTileAdded");
    }
    //当用户从快速设定栏中移除的时候调用
    @Override
    public void onTileRemoved() {
        Log.d(LOG_TAG, "onTileRemoved");
    }
    // 点击的时候
    @Override
    public void onClick() {
        Log.d(LOG_TAG, "onClick state = " + Integer.toString(getQsTile().getState()));
        Icon icon;
        if (toggleState == STATE_ON) {
            toggleState = STATE_OFF;
            icon =  Icon.createWithResource(getApplicationContext(), R.drawable.ic_videocam_off);
            getQsTile().setState(Tile.STATE_INACTIVE);// 更改成非活跃状态
        } else {
            toggleState = STATE_ON;
            icon = Icon.createWithResource(getApplicationContext(), R.drawable.ic_videocam);
            getQsTile().setState(Tile.STATE_ACTIVE);//更改成活跃状态
        }

        getQsTile().setIcon(icon);//设置图标
        getQsTile().updateTile();//更新Tile
    }
    // 打开下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
    //在TleAdded之后会调用一次
    @Override
    public void onStartListening () {
        Log.d(LOG_TAG, "onStartListening");
    }
    // 关闭下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
    // 在onTileRemoved移除之前也会调用移除
    @Override
    public void onStopListening () {
        Log.d(LOG_TAG, "onStopListening");
    }

}

通过getQsTile() 可以设置State和Icon,State有两种状态——STATE_ACTIVE和STATE_INACTIVE, 无论你传的什么颜色的Icon,STATE_ACTIVE都会把Icon渲染成白色, STATE_INACTIVE都会把Icon渲染成灰色。

效果展示:

更多精彩请关注微信公众账号likeDev

时间: 2024-09-20 11:56:15

Android7.0 添加快速设定Quick Settings Tile的相关文章

Android系统到底安不安全?细数Android7.0 Nougat的几大安全增强功能

关于Android7.0 Nougat(牛轧糖) 众所周知,2016年的GoogleI/O开发者大会已经在美国时间的5月18日成功召开了,而在此次大会上,Google公司也正式发布了新版的AndroidN操作系统.2016年8月22日,Google开始正式向用户推送Android7.0 Nougat正式版. 在性能方面,AndroidN不仅对编译器进行了优化,而且还在图形处理方面做了更新.AndroidN下的软件运行速度将提升3-6倍,而且由于引入了全新的JIT编译器,使得app的安装速度提升了

Android7.0 MessageQueue详解_Android

Android中的消息处理机制大量依赖于Handler.每个Handler都有对应的Looper,用于不断地从对应的MessageQueue中取出消息处理. 一直以来,觉得MessageQueue应该是Java层的抽象,然而事实上MessageQueue的主要部分在Native层中. 自己对MessageQueue在Native层的工作不太熟悉,借此机会分析一下. 一.MessageQueue的创建 当需要使用Looper时,我们会调用Looper的prepare函数: public stati

老司机淡飙车技术:Android7.0适配心得

Android7.0发布已经有一个多月了,Android7.0在给用户带来一些新的特性的同时,也给开发者带来了新的挑战,这几天我将应用适配到Android7.0,其中也遇到了不少问题也踩了一些坑,在这里就把我在Android7.0适配上的一些心得分享给大家,让大家的应用能早一天跑在Android7.0上. 权限更改 随着Android版本越来越高,Android对隐私的保护力度也越来越大.从Android6.0引入的动态权限控制(Runtime Permissions)到Android7.0的"

下载安装APK(兼容Android7.0)

我们使用手机的时候经常会看到应用程序提示升级,大部分应用内部都需要实现升级提醒和应用程序文件(APK文件)下载. 一般写法都差不多,比如在启动app的时候,通过api接口获得服务器最新的版本号,然后和本地的版本号比较,来判断是否需要弹出提示框下载,当然也可以通过推送的自定义消息来实现. 我们这里主要讨论的是应用程序下载,并在通知栏提醒下载完成. 实现过程大致分为三步: 创建一个service 在service启动的时候创建一个广播接受者,用于接受下载完成的广播 当BroadcastReceive

Word 2007 中添加快速打印按钮

  与Microsoft Office Word 2007 Beta 2相比,正式版的Microsoft Office Word 2007快速访问工具栏少了个"快速打印"按钮,这给初次使用Microsoft Office Word 2007的新手带来小小的不便,因为往往要费些功夫才能找到有关打印的选项.其实可以通过自定义的方法在快速访问工具栏中添加"快速打印"按钮(图2),当然还可以根据需要添加"打印预览"等其它按钮.

android-studio2.0 添加jar文件后无法运行

问题描述 android-studio2.0 添加jar文件后无法运行 在studio2.0ide 中项目添加了一个jar包后 makeproject 可以通过但运行时就报错如下:Error:Execution failed for task ':app:transformClassesWithDexForDebug'. com.android.build.api.transform.TransformException: com.android.ide.common.process.Proce

Android7.0 工具类:DiffUtil详解_Android

一 概述 DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集->新数据集的最小变化量. 说到数据集,相信大家知道它是和谁相关的了,就是我的最爱,RecyclerView. 就我使用的这几天来看,它最大的用处就是在RecyclerView刷新时,不再无脑mAdapter.notifyDataSetChanged(). 以前无脑mAdapter.notifyDataSetChanged()有两个缺点: 1.不会触发RecyclerView的动画(删

Win10系统操作中心删除/添加快速操作按钮图文教程

1.我们在系统中点击"操作中心"然后进入之后点击"所有设置": 2.在"设置"找到"系统(显示.通知.应用.电源)"选项我们点击它打开进入: 3.好了在进入之后我们再点击"默认应用",-"添加或删除快捷操作"效果如下图所示: 4.按需要,将用不到的功能后面的开关关闭即可,如果需要对应功能,重新开启即可. 好了通过上面各位会发现关于Win10系统操作中心删除/添加快速操作按钮的过程是非常

Android7.0发布1年份额不足10% 谷歌哭晕

北京时间6月6日消息,外媒Android Authority报道,去年谷歌在I/O大会上发布了Android 7.0系统.现在一年过去了,可是Android 7.0系统的市场份额,却让人心疼. Android7.0发布1年份额不足10% (图片来自baidu) 截止6月5日,Android 7.0的市场份额连10%都不到(8.9%+0.6%=9.5%),大量的Android设备还停留在老版本时代.其中Android 6.0和5.x的份额加起来达到了60%以上,Android 6.0版本的份额最多