😽
Android カスタム クイック設定タイルにアプリを追加
カスタムクイック設定タイルにアプリを追加して、押下時にシステム音量表示をする実装。
TileServiceを起動すれば基本的にはOKなので継承した任意のクラスを定義。
class QuickTileService : TileService() {
override fun onTileAdded() {
super.onTileAdded()
qsTile.state = Tile.STATE_ACTIVE
qsTile.subtitle = "Tap Here"
qsTile.updateTile()
}
override fun onStartListening() {
super.onStartListening()
qsTile.state = Tile.STATE_ACTIVE
qsTile.subtitle = "Tap Here"
qsTile.updateTile()
}
override fun onStopListening() {
super.onStopListening()
// no-op
}
override fun onClick() {
if (qsTile.state == Tile.STATE_INACTIVE) {
return
}
super.onClick()
qsTile.state = Tile.STATE_INACTIVE
qsTile.updateTile()
// システム音量バーを表示
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
audioManager.adjustVolume(AudioManager.ADJUST_SAME, AudioManager.FLAG_SHOW_UI)
// 2秒後にアクティブに戻す
Handler(Looper.getMainLooper()).postDelayed({
qsTile.state = Tile.STATE_ACTIVE
qsTile.updateTile()
}, 2000)
}
}
- onTileAdded
- 使用しないタイル位置からクイック通知タイルに追加された時
- onStartListening
- クイック通知でタイルを移動させた時
- 使用するクイック通知欄で移動する度に呼ばれる
- クイック通知でタイルを移動させた時
- onStopListening
- クイック通知でタイルを移動させた時
- 使用するクイック通知欄で移動する度に呼ばれる
- クイック通知でタイルを移動させた時
- onClick
- クイック通知が押下された時
今回はタイルは最初からアクティブ状態で、押下するとシステム音量バーが表示され、2秒後にタイルはアクティブに戻るようにした。
AudioManager#adjustStreamVolume
で特定の音量種類を指定して表示できそうに見えたが、実際にしてみると挙動が微妙だったのでやめておく。各音量操作をしたかったら独自のUIで実装したほうが良さそう。
あとは追加したServiceをManifestに追加するだけでOK。
<service
android:name=".QuickTileService"
android:exported="true"
android:icon="@drawable/ic_launcher_foreground"
android:label="@string/quick_notification_panel_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
-
android:icon
がクイック通知に表示されるアイコン -
android:label
がクイック通知に表示される文言(1行目)- 2行目の、よくあるON/OFF状態表示などはコード側で
qsTile.setSubbtitle
- 2行目の、よくあるON/OFF状態表示などはコード側で
実際に作成したクイック通知タイルを利用した場合
Discussion