一、QuickSettings介绍
Android在7.0版本扩展了快速设置,用户可以自己编辑快速设置。
在Android 7.0中添加了相应的API供开发者使用,开发者可以定义自己应用的快速设置,让用户快速访问或操作应用
Android 官方文档中关于快速设置的说明:
“快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。 在 Android N 中,我们已扩展“快速设置”的范围,使其更加有用更方便。
我们为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。 我们还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。
对于开发者,Android N 还添加了一个新的 API,从而让您可以定义自己的“快速设置”图块,使用户可以轻松访问您应用中的关键控件和操作。
对于急需或频繁使用的控件和操作,保留“快速设置”图块,且不应将其用作启动应用的快捷方式。
定义图块后,您可以将它们显示给用户,用户可通过拖放将图块添加到“快速设置”。
二、QuickSettings UI
1. 通知栏区域
在状态栏下拉一次,展开通知栏,在通知栏的顶部会有一行快速设置。
![](https://img.haomeiwen.com/i226162/54e3cc974a14d855.jpg)
2. 快速设置面板
在通知栏展开后,再次下拉,会展开快速设置面板。快速设置面板可以有多页,左右滑动切换快速设置面板。
![](https://img.haomeiwen.com/i226162/3d1eaa19663950e8.jpg)
![](https://img.haomeiwen.com/i226162/409c3eb452eace6b.jpg)
3. 快速设置编辑面板
点击快速设置面板右下角的修改按钮,可以进入到快速设置的编辑面板。
快速设置编辑面板分为两个区域,
- 上部为显示在快速设置面板中的图块区域
- 下部为可添加的图块区域
用户通过长按拖动来添加、移除或移动设置面板中的图块。
![](https://img.haomeiwen.com/i226162/ea8df8e9e7343111.jpg)
三、QuickSettings API
1. 相关类
Android提供了两个类供开发者实现快速设置,分别是Tile和TileService
1.1 Tile
Tile表示通知栏中快速设置的一个个图块
Tile持有这个图块的状态,有一个带标签的图标,还有对于辅助功能的描述内容,图块的风格和布局会随着设备的不同改变。
Tile的状态
-
STATE_ACTIVE 表示当前Tile是激活的,(例如wifi或蓝牙的是打开的)。
-
STATE_INACTIVE 表示当前Tile是禁用状态,但是仍然具有可用性,(例如wifi或蓝牙是关闭的,用户可以修改当前状态,打开wifi或蓝牙),Tile的图标会显示不同的颜色来表示这种状态。
-
STATE_UNAVAILABLE 表示由于某种原因Tile目前对于用户不可用,不能被点击,Tile的图标会显示不同的颜色来表示这种状态。
1.2 TileService
TileService提供给用于一个可被添加到快速设置区域的Tile,快速设置提供了一个区域允许用户不离开当前应用的来改变设置或执行动作。
1.2.1 TileService的生命周期
TileService的生命周期不同于其它一些服务,因为它可能在其部分生命周期中被解除绑定, 任何以下生命周期事件可以在服务的单独绑定或创建中独立发生。
- [onTileAdded()] 当用户添加一个Tile到快速设置区域时调用,此时TileService会被绑定。
[onTileAdded()]: https://developer.android.com/reference/android/service/quicksettings/TileService.html#onTileAdded() - [onStartListening()] 当Tile被移动到监听状态时调用,当Tile处于监听状态时它希望保持UI是最新的,任何更新Tile的监听或回调应该在这里注册。
[onStartListening()]: https://developer.android.com/reference/android/service/quicksettings/TileService.html#onStartListening() - [onStopListening()] 当Tile被移动出监听状态时调用,任何更新Tile的监听或回调应该在这里注销。
[onStopListening()]: https://developer.android.com/reference/android/service/quicksettings/TileService.html#onStopListening() - [onTileRemoved()] 当用户从快速设置区域移除一个Tile时调用
[onTileRemoved()]: https://developer.android.com/reference/android/service/quicksettings/TileService.html#onTileRemoved()
1.2.2 TileService在AndroidManifest.xml中的配置
因为TileService是一个服务,所以需要在AndroidManifest.xml中进行配置
<service
android:name=".MyTileService"
android:label="@string/my_default_tile_label"
android:icon="@drawable/my_default_icon_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
MyTileService将会被检测是否与ACTION_QS_TILE匹配,并且需要"android.permission.BIND_QUICK_SETTINGS_TILE"权限,可以指定tile的icon和label
1.2.3 TileService的主动模式(active mode)
在默认情况下,只有在Tile可见时,TileService才会被绑定;但是如果你明确知道需要更新Tile时(比如后台更新),那么可以使用主动模式。
可以通过在AndroidManifest.xml中的TileService中添加META_DATA_ACTIVE_TILE将Tile设置为主动模式。
<service
android:name=".MyTileService"
android:icon="@string/my_default_tile_label"
android:label="@drawable/my_default_icon_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
<meta-data
android:name="android.service.quicksettings.ACTIVE_TILE"
android:value="true" />
</service>
主动模式适用于在自己进程中监听和跟踪其状态的Tile,这种Tile可以在其进程存活期间通过requestListeningState(Context, ComponentName)方法向系统发送更新请求。
在主动模式下,系统仅会在需要点击时绑定Tile,当调用requestListeningState(Context, ComponentName)方法时会回调[onStartListening()]方法。
网友评论