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

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

  1. Android7.0新特性,及Android N适配

    新特性部分 Android 7.0 Nougat 提供新功能以提升性能.生产效率和安全性,主要新增了下面的新特性和优化: 一.新的Notification Android N 添加了很多新的notif ...

  2. cino伟斯 A770键盘界面快速设定记录后缀删除添加换行回车操作方法

    http://www.cinoscan.com/upload/2016063033256485.pdf cino A770键盘界面快速设定记录后缀删除添加换行回车操作方法

  3. Android7.0 Phone应用源码分析(一) phone拨号流程分析

    1.1 dialer拨号 拨号盘点击拨号DialpadFragment的onClick方法会被调用 public void onClick(View view) { int resId = view. ...

  4. Appium在Android7.0及以上系统运行时报错的解决方案

    背景:在使用Samsung S系列手机进行自动化测试时,发现同样脚本的情况下华为荣耀系列可以正常运行,最终发现差异在于Android7.0及以上系统和appium版本不匹配,需要升级appium.但需 ...

  5. .Net Core 3.0 IdentityServer4 快速入门

    .Net Core 3.0 IdentityServer4 快速入门 一.简介 IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架. 将 ...

  6. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇

    1.简介 众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用 ...

  7. Android7.0 Phone应用源码分析(二) phone来电流程分析

    接上篇博文:Android7.0 Phone应用源码分析(一) phone拨号流程分析 今天我们再来分析下Android7.0 的phone的来电流程 1.1TelephonyFramework 当有 ...

  8. Android7.0 Phone应用源码分析(三) phone拒接流程分析

    本文主要分析Android拒接电话的流程,下面先来看一下拒接电话流程时序图 步骤1:滑动按钮到拒接图标,会调用到AnswerFragment的onDecline方法 com.android.incal ...

  9. 拍照、本地图片工具类(兼容至Android7.0)

    拍照.本地图片工具类:解决了4.4以上剪裁会提示"找不到文件"和6.0动态授予权限,及7.0报FileUriExposedException异常问题. package com.hb ...

随机推荐

  1. Redis源码解析:20sentinel(一)初始化、建链

    sentinel(哨兵)是redis的高可用解决方案.由一个或多个sentinel实例组成的分布式系统,可以监控任意多个主节点,以及它们属下的所有从节点.当某个主节点下线时,sentinel可以将下线 ...

  2. 只要三步!阿里云DLA帮你处理海量JSON数据

    概述 您可能有大量应用程序产生的JSON数据,您可能需要对这些JSON数据进行整理,去除不想要的字段,或者只保留想要的字段,或者仅仅是进行数据查询. 那么,利用阿里云Data Lake Analyti ...

  3. animation-fill-mode 之 forwards , transition-timing-function的取值 和 transform属性

    animation-fill-mode 有四个值可选,并且允许由逗号分隔多个值. none 不改变默认行为. forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义). backw ...

  4. OpenLayers修改要素

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. angular4 Form表单相关

    ng4中,有两种方式去声明一个表单 一:Template-Driven Forms - 模板驱动式表单   [引入FormsModule] 1.ngForm赋值 [可以方便的获取表单的值] <f ...

  6. jnhs-SpringMVC的controller向jsp传递数据的五种方式

    参考此文http://blog.sina.com.cn/s/blog_6d3c1ec601014h1h.html 1 使用ModelAndVoew 引入:org.springframework.web ...

  7. jnhs-SpringMVC jsp页面向controller传递参数的五种方式

    一共是五种传参方式: 一:直接将请求参数名作为Controller中方法的形参 public  String login (String username,String password)   : 解 ...

  8. IO流8 --- 使用FileReader和FileWriter实现文本文件的复制 --- 技术搬运工(尚硅谷)

    @Test public void test4(){ FileReader fr = null; FileWriter fw = null; try { fr = new FileReader(&qu ...

  9. idea添加jar包

    之前一直使用eclipse,现在使用idea,发现两者引用外部jar的时候不太一样,分享一下. 使用eclipse引用外部jar的时候,我们可以在工程下新建一个lib包来存放,然后add to bui ...

  10. arcgis几何对象

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...