基于Android R版本分析
TileService - Android中文版 - API参考文档;
车控车设快捷方式使用说明
1. 定义TileService
package com.nobo.tiledemo;
import android.service.quicksettings.TileService;
public class DemoTile extends TileService {
/**
* 由系统调用以通知服务它开始使用并正在被添加
*
* 简单理解为Customize Tile添加到快捷面板中
*/
@Override
public void onCreate() {
super.onCreate();
}
/**
* 当此图块移入侦听状态时调用
*
* 可以简单的理解为,当自定义Tile icon位于快捷面板界面时,开启快捷面板
* 则开启Customize Tile Listener
*/
@Override
public void onStartListening() {
super.onStartListening();
}
/**
* 当此图块移出侦听状态时调用
*
* 可以简单的理解为,当自定义Tile icon位于快捷面板界面时,退出快捷面板
* 则停止Customize Tile Listener
*/
@Override
public void onStopListening() {
super.onStopListening();
}
/**
* 当用户将此图块添加到快速设置时调用
*/
@Override
public void onTileAdded() {
super.onTileAdded();
}
/**
* 当用户从快速设置中删除此图块时调用
*/
@Override
public void onTileRemoved() {
super.onTileRemoved();
}
/**
* 当用户点击此图块时调用
*
* 该方法实现具体的业务逻辑
*/
@Override
public void onClick() {
super.onClick();
}
/**
* 由系统调用以通知服务它已不再使用并正在被删除
*
* 简单理解为Customize Tile从快捷面板中移除
*/
@Override
public void onDestroy() {
super.onDestroy();
}
}
2. AndroidManifest.xml中声明Service
<service
android:name=".DemoTile"
android:label="DemoTile"
android:icon="@drawable/my_default_icon_label"
android:exported="true"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
核心点
这里面需要注意几个关键点:
属性
- label:该属性不是必须的,在底层中,会判断label属性是否定义,如果没有定义,则默认为 "null" ,切记,这里的null,代表的是“null”字符串;
- icon:这个是必须要定义的属性,如果没有定义,则底层不会加载当前的Service,即Customize Tile无效;还有icon value和application的icon不能同时等于0,当同时都等于0时,默认Customize Tile无效;
- exported:需要根据具体的业务逻辑进行定义,不是必须项。在有intent-filter定义时,默认值为true,否则为false;
- permission:这个属性定义也是必须的,只有声明了"android.permission.BIND_QUICK_SETTINGS_TILE"权限的TileService才能生效,否则无效;
intent-filter
针对Service的intent filter,必须要定义规定的ACTION:
android.service.quicksettings.action.QS_TILE
只有定义了该ACTION的Service,在底层遍历ServiceInfo的时候,才可以通过Intent的方式过滤指定的ACTION来查询所有适配的TileService;
3. AndroidManifest Service 解析
针对priv_app以及实时的install类型的apk中声明的TileService都支持;
4. 使用范围
需要适配白名单的应用进程所声明的TileService才可以生效,否则无效;
适配规则:packageName + serviceName;