一、添加一個Tile
-
創(chuàng)建一個類繼承TileService
public class MyTileService extends TileService { }
-
在AndroidManifest.xml配置這個服務(wù)
因為TileService是一個服務(wù)礁蔗,所以需要在AndroidManifest.xml中進(jìn)行配置
<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"權(quán)限伏钠,可以指定tile的icon和label
-
添加到快速設(shè)置區(qū)域
運行程序蚌成,就可以在快速設(shè)置編輯面板的可添加區(qū)域看到新增的Tile集晚,可長按拖動添加到快速設(shè)置面板中
快速設(shè)置編輯面板
二、重寫TileService中的方法
1. 生命周期回調(diào)方法
在繼承TileService的類中重寫TileService生命周期回調(diào)方法
public class MyTileService extends TileService {
public static final String TAG = MyTileService.class.getSimpleName();
@Override
public void onTileAdded() {
super.onTileAdded();
// 當(dāng)用戶添加Tile到快速設(shè)置區(qū)域時調(diào)用瓶逃,可以在這里進(jìn)行一次性的初始化操作。
Log.d(TAG, "onTileAdded()============");
}
@Override
public void onStartListening() {
super.onStartListening();
// 當(dāng)Tile變?yōu)榭梢姇r調(diào)用廓块,這里可以進(jìn)行更新Tile金闽,注冊監(jiān)聽或回調(diào)等操作。
Log.d(TAG, "onStartListening()============");
}
@Override
public void onStopListening() {
super.onStopListening();
// 當(dāng)Tile變?yōu)椴豢梢姇r調(diào)用剿骨,這里可以進(jìn)行注銷監(jiān)聽或回調(diào)等操作代芜。
Log.d(TAG, "onStopListening()============");
}
@Override
public void onTileRemoved() {
super.onTileRemoved();
// 當(dāng)用戶從快速設(shè)置區(qū)域移除一個Tile時調(diào)用,這里不要做有關(guān)于此Tile的任何操作浓利。
Log.d(TAG, "onTileRemoved()============");
}
}
2. 處理點擊事件
處理Tile的點擊時間需要重寫TileService的onClick()發(fā)放
@Override
public void onClick() {
super.onClick();
// 這里可以響應(yīng)用戶點擊Tile的操作
Log.d(TAG, "onClick()============");
}
3. TileService提供的方法
TileService提供了一些方法用來執(zhí)行常用的操作挤庇,可以在onClick()方法中調(diào)用這些執(zhí)行方法钞速。
- [showDialog(Dialog)] 會折疊快速設(shè)置面板并顯示一個對話框
[showDialog(Dialog)]:https://developer.android.com/reference/android/service/quicksettings/TileService.html#showDialog(android.app.Dialog) - [startActivityAndCollapse(Intent)] 會折疊快速設(shè)置面板并啟動一個Activity
[startActivityAndCollapse(Intent)]:https://developer.android.com/reference/android/service/quicksettings/TileService.html#startActivityAndCollapse(android.content.Intent) - [unlockAndRun(Runnable)] 在執(zhí)行Runnable前提示用戶解鎖設(shè)備。將會提示用戶用當(dāng)前設(shè)置的解鎖方式解鎖嫡秕,如果用戶解鎖成功將會執(zhí)行Runnable渴语,如果用戶未能解鎖成功或取消操作,Runnable將不會執(zhí)行
[unlockAndRun(Runnable)]:https://developer.android.com/reference/android/service/quicksettings/TileService.html#unlockAndRun(java.lang.Runnable) - [isLocked()] 返回屏幕是否被鎖定昆咽。如果屏幕鎖定驾凶,[showDialog(Dialog)]方法顯示的dialog將會在鎖屏之下;如果在屏幕鎖定期間的Tile行為是安全的掷酗,那么應(yīng)該使用startActivity(Intent)在鎖屏之上運行一個Activity调违,否則Tile應(yīng)該使用[unlockAndRun(Runnable)]給用戶解鎖提示。
[isLocked()]:https://developer.android.com/reference/android/service/quicksettings/TileService.html#isLocked() - [isSecure()] 返回設(shè)備是否處于安全狀態(tài)(如設(shè)置的圖案泻轰、PIN碼或指紋解鎖技肩,在未解鎖前設(shè)備處于安全狀態(tài);若沒有設(shè)置解鎖或滑動解鎖浮声,則設(shè)備始終處于非安全狀態(tài))虚婿,Tile在響應(yīng)用戶點擊操作時應(yīng)該檢測設(shè)備是否安全,并相應(yīng)的改變行為泳挥。
[isSecure()]:https://developer.android.com/reference/android/service/quicksettings/TileService.html#isSecure()
三然痊、操作Tile
1. 獲取Tile
可以通過TileService提供的[getQSTile()]方法來獲取到改Service的Tile,可以用來獲取或設(shè)置Tile的狀態(tài)屉符,對Tile的更新只在[onStartListening()]和[onStopListening()]之間有效剧浸。
[getQSTile()]:https://developer.android.com/reference/android/service/quicksettings/TileService.html#getQsTile()
[onStartListening()]: https://developer.android.com/reference/android/service/quicksettings/TileService.html#onStartListening()
[onStopListening()]: https://developer.android.com/reference/android/service/quicksettings/TileService.html#onStopListening()
2. 修改Tile
獲取到Tile之后可以使用Tile提供的方法對Tile進(jìn)行修改
- [setIcon(Icon)] 設(shè)置Tile的icon,圖標(biāo)的顏色將會是白色的筑煮,也有可能被系統(tǒng)著色適配其它主題辛蚊。
[setIcon(Icon)]:https://developer.android.com/reference/android/service/quicksettings/Tile.html#setIcon(android.graphics.drawable.Icon) - [setLabel(CharSequence)] 設(shè)置Tile的label
[setLabel(CharSequence)]:https://developer.android.com/reference/android/service/quicksettings/Tile.html#setLabel(java.lang.CharSequence) - [setContentDescription(CharSequence)] 設(shè)置Tile的內(nèi)容描述
[setContentDescription(CharSequence)]:https://developer.android.com/reference/android/service/quicksettings/Tile.html#setContentDescription(java.lang.CharSequence) - [setState(int)] 設(shè)置Tile的狀態(tài)
[setState(int)]:https://developer.android.com/reference/android/service/quicksettings/Tile.html#setState(int)
** 以上四種方法調(diào)用完之后并不會立即產(chǎn)生效果,只有再調(diào)用了Tile的[updateTile()]方法之后才會產(chǎn)生效果 **
- [updateTile()] 將當(dāng)前Tile的樣式和狀態(tài)發(fā)送到快速設(shè)置區(qū)域以更新顯示
[updateTile()]:https://developer.android.com/reference/android/service/quicksettings/Tile.html#updateTile()