【问题标题】:Phonegap / Cordova pause event triggered on resume for android; can not turn off audio as a resultPhonegap / Cordova 暂停事件在 android 的恢复上触发;结果无法关闭音频
【发布时间】:2014-12-01 06:30:47
【问题描述】:

我正在开发一个使用 Phonegap Media 插件播放音频的 Phonegap 应用。当我按下我的 android 设备(KitKat 4.4)上的主页按钮或屏幕锁定按钮时,应用程序会正常进入后台,但音频不会关闭,因为没有调用暂停事件。只有当我恢复应用程序时才会运行暂停事件,并且我关闭音频的代码最终会运行。 resume 事件也会在此之后运行。

阅读有关暂停事件的 Phonegap 文档,有一个关于 iOS Quirks 的注释:

“在暂停处理程序中,对 Cordova API 或通过 Objective-C 的本机插件的任何调用以及任何交互式调用(例如警报或 console.log())都不起作用。它们仅在以下情况下被处理应用程序在下一个运行循环中恢复。”

这与我在 Android 设备上看到的非常相似,但我想知道这是否是同一个问题。我真的需要修复或解决方法,因为当用户暂停应用程序时,无法关闭音频。

这是我添加暂停事件监听器的代码:

document.addEventListener('deviceready', on_device_ready, false);
function on_device_ready()
{
    document.addEventListener('pause', on_pause, false);
    document.addEventListener('resume', on_resume, false);
}

更新:我想我已经解决了, 虽然我对解决方案不太满意。我已将 Phonegap config.xml 变量 KeepRunning 设置为 false。我设置为 true,现在它会在应该的时候获得暂停事件。我觉得我应该能够阻止我的应用程序在后台运行,并且还可以预先运行一些暂停代码。

无论如何,这里是我正在谈论的 config.xml 行:

<preference name="KeepRunning" value="true"/>

【问题讨论】:

  • 暂停后以编程方式停止应用怎么样?
  • 有趣——这在 Cordova 中通常是一个大问题。不知道这是否适用于 iOS。
  • 哦,您也许应该将该解决方案放在下面作为答案。完全允许。

标签: javascript android cordova


【解决方案1】:

当我为我的论文开发一个 mp3 播放器时,我在第一个 android 版本中遇到了同样的问题。
问题是我没有创建线程,因此停止函数不是优先执行的。

我知道我的论文不是在 Cordova 中,而是在阅读 Cordova 文档中指出的

Threading. JavaScript in the WebView does not run on the UI thread. It runs on the 
WebCore thread

来自Cordova Documentation

也看看Android Documentation,你有没有想过实现一个类来处理适合Cordova插件的多线程和任务队列?

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多