Android N version 其中一個功能,就是允許三方app可以添加自己的快速設(shè)定,到系統(tǒng)的下拉設(shè)定中,方便用戶快速打開關(guān)閉某些功能.
廢話不多說,直接上代碼來講解.
- 創(chuàng)建一個class,繼承自TileService,這個TileService是N SDK新加的,所以務(wù)必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中聲明,這樣才能被系統(tǒng)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>
從上面的聲明中,其實已經(jīng)比較明顯,這個Tile要顯示的名字,icon等都是在這里聲明的,特別注意這里一定要加上對應(yīng)的permission才行.
- 下來可以先看下實際效果,下拉后再Q(mào)uick Setting中會有個Edit,點擊后往下滑動,三方APP定義的QS tile就會都顯示,可以通過拖拽放到常用設(shè)定中.
Screenshot_20160718-202234.png
- 有了顯示后,還需要有對應(yīng)的功能才有意義。一般來說,QS中的tile的功能就是某個功能開關(guān),比如手電筒的開關(guān)等,因此這里通常需要實現(xiàn)的就是點擊的相應(yīng),已經(jīng)開關(guān)狀態(tài)的顯示。
先說點擊,這個比較簡單,就是override的TileService 的onClick() function. 可以是啟動自己的activity等,根據(jù)APP需求來編寫.
@Override
public void onClick() {
super.onClick();
Log.d("TEST","Launch onClick()")
}
那么怎么更新state呢?這里QS的定義會是兩個狀態(tài),Tile.STATE_ACTIVE 和 Tile.STATE_INACTIVE, 而這兩個狀態(tài)的設(shè)定則是app自己結(jié)合你的功能來設(shè)定,然后再更新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其實就是對圖做翻色的一個設(shè)定,我沒有測試這里是否可以放置非白色的圖,但是default都是這種白色的icon,然后反轉(zhuǎn)成黑底的
Screenshot_20160718-210709.png
Screenshot_20160718-210714.png
07-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
原理的部分還沒有仔細看過,如果有興趣的同學(xué)可以一起討論學(xué)習(xí).