Android - Nougat(7.0) 创建通知栏快捷设置

Android Nougat(7.0) 可以往通知栏的快捷设置里添加自定义按钮了

Android 把快捷设置项叫做Tile(瓦片),创建Tile需要一个TileService

TileService

继承TileService实现一个QuickService,在AndroidManifest.xml中声明
权限:android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
过滤器:android:name="android.service.quicksettings.action.QS_TILE"

1
2
public class QuickService extends TileService {
}
AndroidManifest.xml
1
2
3
4
5
6
7
8
9
<service
android:name=".QuickService"
android:label="@string/quick_service_name"
android:icon="@drawable/ic_quick_setting"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>

完成上面的代码,就已经可以在通知栏的快捷设置添加我们的设置项了

TileService.工作流
1
2
3
4
5
6
7
8
9
10
// 当 tile 被添加时的回调
public int onTileAdded()
// 当 tile 被移除时的回调
public void onTileRemoved()
// 当 tile 可见时的回调
public void onStartListening ()
// 当 tile 不可见加时的回调
public void onStopListening ()
// 当 tile 点击时的回调
public void onClick ()
TileService.获取对应的 Tile
1
public final Tile getQsTile ()

Tile

Tile Setters
1
2
3
4
5
6
7
public void setIcon (Icon icon)
public void setLabel (CharSequence label)
public void setState (int state)
public void setContentDescription (CharSequence contentDescription)
Title Update
1
public void updateTile ()

修改了Tile的属性,需要手动调用updateTile(),才会更新。

生命周期

编辑界面 把按钮拖进快捷设置栏
1
2
3
4
D/QuickService: onCreate
D/QuickService: onBind
D/QuickService: onTileAdded
D/QuickService: onDestroy
快捷设置栏中按钮可见
1
2
3
D/QuickService: onCreate
D/QuickService: onBind
D/QuickService: onStartListening
快捷设置栏按钮不可见
1
2
D/QuickService: onStopListening
D/QuickService: onDestroy
点击按钮
1
D/QuickService: onClick
编辑界面 把按钮移除快捷设置栏
1
2
3
4
5
6
D/QuickService: onStopListening
D/QuickService: onDestroy
D/QuickService: onCreate
D/QuickService: onBind
D/QuickService: onTileRemoved
D/QuickService: onDestroy

透过生命周期,不难看出,Android API的设计,系统会使用bind方式启动对应的TileService,实现系统界面和你的程序进行通讯。

源码

https://github.com/gavinliu/CustomQuickSettingTile

Gavin Liu wechat
欢迎您扫一扫上面的二维码,订阅我的微信公众号!