Android N version 其中一个功能,就是允许三方app可以添加自己的快速设定,到系统的下拉设定中,方便用户快速打开关闭某些功能.
废话不多说,直接上代码来讲解.
- 创建一个class,继承自TileService,这个TileService是N SDK新加的,所以务必SDK更新到N version
public class TestTile extends TileService {
@Override
public void onStartListening() {
super.onStartListening();
}
@Override
public void onStopListening() {
super.onStopListening();
}
@Override
public void onClick() {
super.onClick();
}
}
这里的override方法之后会再详细介绍.
- 建完service后,需要在manifest中声明,这样才能被系统SystemUI query到
<service android:name=".TestTile"
android:label="@string/tile_label"
android:icon="@drawable/ic_zen"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE"/>
</intent-filter>
</service>
从上面的声明中,其实已经比较明显,这个Tile要显示的名字,icon等都是在这里声明的,特别注意这里一定要加上对应的permission才行.
- 下来可以先看下实际效果,下拉后再Quick Setting中会有个Edit,点击后往下滑动,三方APP定义的QS tile就会都显示,可以通过拖拽放到常用设定中.
- 有了显示后,还需要有对应的功能才有意义。一般来说,QS中的tile的功能就是某个功能开关,比如手电筒的开关等,因此这里通常需要实现的就是点击的相应,已经开关状态的显示。
先说点击,这个比较简单,就是override的TileService 的onClick() function. 可以是启动自己的activity等,根据APP需求来编写.
@Override
public void onClick() {
super.onClick();
Log.d("TEST","Launch onClick()")
}
那么怎么更新state呢?这里QS的定义会是两个状态,Tile.STATE_ACTIVE 和 Tile.STATE_INACTIVE, 而这两个状态的设定则是app自己结合你的功能来设定,然后再更新UI,方法基本上类似下面
@Override
public void onClick() {
super.onClick();
num++;
boolean enabled = num % 2 == 0;
Log.d("TEST","Run onClick function with enabled = " + enabled);
getQsTile().setState(enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
getQsTile().updateTile();
}
另外要注意,这里的ACTIVE和INACTIVE其实就是对图做翻色的一个设定,我没有测试这里是否可以放置非白色的图,但是default都是这种白色的icon,然后反转成黑底的
Screenshot_20160718-210709.png Screenshot_20160718-210714.png07-18 21:03:10.437 8692 8692 D TEST : Run onClick function with enabled = f
alse
07-18 21:03:13.715 8692 8692 D TEST : Run onClick function with enabled = t
rue
07-18 21:03:14.941 8692 8692 D TEST : Run onClick function with enabled = f
alse
07-18 21:03:15.656 8692 8692 D TEST : Run onClick function with enabled = t
rue
07-18 21:03:21.745 8692 8692 D TEST : Run onClick function with enabled = f
alse
07-18 21:03:22.531 8692 8692 D TEST : Run onClick function with enabled = t
rue
07-18 21:05:07.896 8692 8692 D TEST : Run onClick function with enabled = f
alse
07-18 21:07:11.244 8692 8692 D TEST : Run onClick function with enabled = t
rue
原理的部分还没有仔细看过,如果有兴趣的同学可以一起讨论学习.
网友评论