标签: android-app-quick-setting

Android TileService onStartListening 没有立即调用?

Android TileService文档声明如下:

磁贴何时应该是最新的并且列表将由 onStartListening() 和 onStopListening() 指示。

根据 TileService 的生命周期,您应该在onStartListening()调用时开始更新图块状态。

问题是,当图块进入用户视图时,似乎并没有立即调用此回调。这意味着在视图正确更新之前,它有时可能会显示过时的信息几秒钟。

例如,服务已连接,磁贴将其显示为已连接。然后,我切换到应用程序,关闭服务,然后重新打开“快速设置”视图。它仍然显示该服务已连接很长时间。

理论上,磁贴进入视图的那一刻,它应该已使用新数据进行更新并将其显示为未连接。

我通过简单地添加一条日志消息作为视图中的第一个条目来确认这种情况。当我将图块带入用户视图时,该日志消息在 4-5 秒的时间内不会写入 log cat。

发生什么了?我错过了什么吗?

我的代码

@Override
public void onStartListening() {
    android.util.Log.d("Test", "onStartListening called");
    updateTileDisplay();
    registerDelegate();
}
Run Code Online (Sandbox Code Playgroud)

updateTileDisplay();功能正在更新图块的标题、状态和图标。一旦完成,它就会按tile.updateTile();应有的方式进行调用。此外,该registerDelegate();函数正在注册一个委托,该委托将侦听内部状态更改并相应地更新图块。onStopListening()该委托稍后在被调用时被删除。

onStartListening called直到我将图块放入视图后 5 秒以上,我才看到该日志消息。这似乎与 TileService 文档不一致。

android android-app-quick-setting

7
推荐指数
0
解决办法
632
查看次数

为什么 TileService 会等待几秒钟才能启动 Activity?

我使用 aTileService作为快捷方式来打开我的应用程序的Activity. 它只做那个,没有状态。

它看起来像这样:


class QuickAccessTileService : TileService() {

    override fun onClick() {
        super.onClick()

        val intent = Intent(this, SlideOverActivity::class.java)
            .addFlags(FLAG_ACTIVITY_NEW_TASK)

        startActivityAndCollapse(intent)
    }
}
Run Code Online (Sandbox Code Playgroud)

它声明AndroidManifest为:


class QuickAccessTileService : TileService() {

    override fun onClick() {
        super.onClick()

        val intent = Intent(this, SlideOverActivity::class.java)
            .addFlags(FLAG_ACTIVITY_NEW_TASK)

        startActivityAndCollapse(intent)
    }
}
Run Code Online (Sandbox Code Playgroud)

就目前而言,这是有效的。但是,当我的应用程序停止时,下次我尝试通过快速设置面板打开它时,需要几秒钟才能启动该活动。

这是我所知道的:

Activity 本身启动起来并不慢。尝试通过启动器打开它会很清楚。

Service似乎是什么服用一段时间才能开始之前,onClick甚至执行。这说得通; Service当应用程序没有运行时,它可能不会在后台运行。然而,这意味着,当系统检测到我的点击TileService首先必须重建,这需要的时间太长了。

我不知道从哪里开始——如果我的猜测是对的。

编辑:作为一个重要的补充,我可以在运行 Android Pie 的 OnePlus 7 Pro …

android android-service android-app-quick-setting

5
推荐指数
1
解决办法
509
查看次数

Android 13 - 用于快速设置面板的 TileService 在单击时不会折叠

简短问题:startActivityAndCollapse不适用于 Android 13

长问题:我正在为快速设置面板创建一个图块。我尝试实现这个演示。它适用于除Android 13之外的所有其他设备

override fun onClick() {
    super.onClick()
    try {
        val newIntent =
            FlutterActivity.withNewEngine().dartEntrypointArgs(listOf("launchFromQuickTile"))
                .build(this)
        newIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        startActivityAndCollapse(newIntent)
    } catch (e: Exception) {
        Log.d("debug", "Exception ${e.toString()}")
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以打开应用程序,但不会折叠快速设置面板。

有什么解决办法,有帮助吗?

编辑:

我对此进行了更多研究,发现只有当我通过 Android 活动时它才有效。

示例(安卓):

val newIntent = Intent(this, MainActivity::class.java)
newIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivityAndCollapse(newIntent)
Run Code Online (Sandbox Code Playgroud)

示例(颤振):

val newIntent = FlutterActivity.withNewEngine().dartEntrypointArgs(listOf("launchFromQuickTile")).build(this)
newIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivityAndCollapse(newIntent)
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以使用 Params 打开 Flutter App 吗?

android flutter android-app-quick-setting tile-service

5
推荐指数
1
解决办法
634
查看次数