【问题标题】:How to keep webview running in foreground service after pressing home button in android?在android中按下主页按钮后如何保持webview在前台服务中运行?
【发布时间】:2019-10-26 09:01:19
【问题描述】:

我正在 webview 中加载一个播放一些音频歌曲的 url。当用户按下主页按钮时,音频会在一段时间后停止(可能是因为活动处于停止状态)。

嗯,我认为服务可能会解决我的问题。但是我怎样才能让歌曲在前台播放,即 Webview 并将其显示在服务的通知栏上。

编辑:- 我不想再次加载 URL,因为这样做会再次进入网站的主页。 我认为这可以使用前台服务来完成。但我不知道如何保存 webview 的状态并使用前台服务保持它从该状态运行。

【问题讨论】:

  • 您的意思是保留在后台播放歌曲的 webview 并在通知栏上显示它吗?
  • @angus 你是绝对正确的。我认为可以通过使用前台服务来完成。但我不明白我该怎么做!
  • @tynn 您提到的链接是使用我不想要的 loadurl 再次加载 webview。因为它会从头重新开始这首歌。
  • 你找到解决办法了吗?

标签: java android android-webview android-service android-homebutton


【解决方案1】:

我自己尝试的唯一解决方案是将 webview 附加到大小为 0 的窗口(使其不可见):

val params = WindowManager.LayoutParams(
    0, 0, TYPE_APPLICATION_OVERLAY, FLAG_NOT_FOCUSABLE or FLAG_NOT_TOUCHABLE, PixelFormat.RGBA_8888
)
(context.getSystemService(Context.WINDOW_SERVICE) as WindowManager).addView(webview, params)

您可以在前台服务中执行此代码,并在应用程序进入前台时从窗口中删除 webview:

windowManager.removeViewImmediate(webivew)

您可以在 Activity 的 onStart/onStop(或 Service 的 onCreate/onDestroy,但您必须在应用程序进入前台时关闭该服务)中调用此附加/分离代码。您只需要前台服务即可避免您的应用被安卓系统杀死。

另一点需要考虑 - 您不应该在活动中创建 webview(以防止内存泄漏),因为您的 webview 具有不同的生命周期。一种方法是在 Application 中创建您的 webview(使用它的上下文)并将其注入到活动中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2023-04-09
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2014-06-26
    相关资源
    最近更新 更多