【第22期】观点:IT 行业加班,到底有没有价值?

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

原创 2016年08月30日 10:44:44

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
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

《Android Studio实用指南》12.18 文本搜索工具

博客: http://blog.csdn.net/wirelessqa本文节选自《Android Studio实用指南》 作者: 毕小朋Android Studio中提供了非常方便的搜索工具,可以在编...

解决Android Studio中调试总出现waiting for adb问题

本人电脑上装的是腾讯的android设备驱动进程tadb.exe. 此进程在android程序调试过程中会占用adb所以使得android studio 无法与之桥接。接下来主要讲如何找到这个问题的...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Android 中 adb 相关问题

这几天看android中的数据库SQLite,需要使用 adb shell 来查看数据库中的信息,但是随之发生了一系列问题,所以在这里提出来,也算是学习经验的记录吧!首先,我在控制台中使用adb sh...

[Android](Problem)-"Waiting for target device to come online".

环境: win10专业版(创意者),Android studio 2.3.1 问题描述: 安装玩Android studio之后创建一个项目,建立AVD之后,运行程序时一直不能启动AVD,...

adb server is out of date. killing

1:今天调试android的时候发现一个诡异的问题 C:\Users\xxxx>adb start-server adb server is out of date. killing... ADB...

mac android studio Waiting for application to come online解决方案

I found the issue. See this image below: First I select the second option, and it worked fine. But ...

android修改开机动画和铃声

1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片); 2. Android平台启动初始化,出现"A N D R I O D"文字字...

Android虚拟机无法正常工作几例及解决办法

Android 2.3.3 Eclipse Version: 3.7.0 Console Eclipse下运行Android虚拟机,Run应用,正常的Console一般如下: [2012-...

Android 6.0 Marshmallow 通知栏中QuickSetting分析

在SystemUI中,状态栏和通知栏都是在PhoneStatusBar的makeStatusBarView方法添加进来的,这里主要说说状态栏中的QuickSettingPanel里各个图标的显示,以及...

[FAQ14053]L1下拉状态栏QuickSetting没有数据连接

[DESCRIPTION] 这个是MTK在L1上的设计。 OM版本(开放版)QuickSetting只显示信号塔button,点击跳转到数据连接界面,如左图所示。 运营商版本(运行商定制OP01...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)