我使用TileService
作为打开应用程序Activity
的快捷方式。它只是这样做,并且没有状态。
它看起来像这样:
class QuickAccessTileService : TileService() {
override fun onClick() {
super.onClick()
val intent = Intent(this, SlideOverActivity::class.java)
.addFlags(FLAG_ACTIVITY_NEW_TASK)
startActivityAndCollapse(intent)
}
}
,它在AndroidManifest
中声明为:
<service
android:name=".service.QuickAccessTileService"
android:icon="@drawable/ic_home"
android:label="@string/tile_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
按目前的情况工作。但是,当我的应用程序停止运行时,下次我尝试通过快速设置面板 打开该应用程序时,它需要几秒钟才能开始活动。
这就是我所知道的:
该活动本身并不慢就开始。尝试通过启动器 打开它,这很清楚。
Service
似乎需要花费一段时间才能开始执行onClick
。这说得通; Service
可能不会在后台运行,而该应用程序没有运行。但是,这意味着当系统检测到对我的Tile
的点击时,必须首先重新创建 Service
,这会花费很长时间。
如果我的猜测正确,我不确定该从哪里去。
编辑:作为一项重要的补充,我可以在运行于Android Pie的OnePlus 7 Pro上重现此内容。这可能是OnePlus特有的问题,因为我无法在模拟器上重现它。
答案 0 :(得分:0)
@RequiresApi(Build.VERSION_CODES.N)
class TileSettingClass : TileService() {
override fun onClick() {
super.onClick()
val tile = qsTile
if (tile.state == Tile.STATE_INACTIVE) {
tile.state = Tile.STATE_ACTIVE
val intent = Intent(this.applicationContext, YourActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.action = "yourAction"
applicationContext.startActivity(intent)
} else {
tile.state = Tile.STATE_INACTIVE
}
tile.updateTile()
}
}
清单
<service
android:name=".main.service.TileSettingClass"
android:icon="@drawable/ic_tile_setting"
android:label="@string/milliy"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
>
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>