一、添加一個Tile
-
創(chuàng)建一個類繼承TileService
public class MyTileService extends TileService { } -
在AndroidManifest.xml配置這個服務(wù)
因為TileService是一個服務(wù),所以需要在AndroidManifest.xml中進行配置
<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)用,可以在這里進行一次性的初始化操作。
Log.d(TAG, "onTileAdded()============");
}
@Override
public void onStartListening() {
super.onStartListening();
// 當(dāng)Tile變?yōu)榭梢姇r調(diào)用,這里可以進行更新Tile,注冊監(jiān)聽或回調(diào)等操作。
Log.d(TAG, "onStartListening()============");
}
@Override
public void onStopListening() {
super.onStopListening();
// 當(dāng)Tile變?yōu)椴豢梢姇r調(diào)用,這里可以進行注銷監(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進行修改
- [setIcon(Icon)] 設(shè)置Tile的icon,圖標的顏色將會是白色的,也有可能被系統(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()
