Guy*_*owe 4 audio android background cordova
我有一种情况,我们有一个使用webview的Android应用程序.当用户导航到YouTube视频时,它开始播放(带有音频),然后用户使用设备的硬件开关锁定设备,它会继续播放音频.
使用设备菜单将应用程序发送到后台或退出应用程序时,不会发生这种情况.
有谁知道为什么会发生这种情况以及如何阻止它?
编辑:我刚刚在这里发现了类似的,未答复的帖子:应用程序可以播放视频,科尔多瓦问题,谷歌播放拒绝应用程序
小智 6
Google在拒绝该应用时遇到了同样的问题,因为当您按下电源按钮关闭屏幕时,webview会继续播放来自YouTube视频的音频.
出于某种原因,似乎按下电源按钮不会触发webview的onPause(),这就是音频继续播放的原因.虽然这对于在屏幕关闭时保持音乐播放很有用,但Google不喜欢youtube视频的这种行为.
为了让Google满意,您可以覆盖活动/片段的onPause(),如下所示:
@Override
public void onPause() {
super.onPause();
myCustomWebView.onPause();
}
Run Code Online (Sandbox Code Playgroud)
按下电源按钮现在也会触发webview的onPause().然而,这会产生另一个问题:当屏幕关闭时,您实际想要继续播放的音频怎么样?
我提出的一个修复是覆盖WebViewClient的onLoadResource(),这允许我检查资源是否来自youtube,这决定了当时间到来时是否应该调用webview的onPause().像这样的东西:
myCustomWebView.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView webview, String url) {
super.onLoadResource(webview, url);
if (url.contains("youtube.com")) mShouldPause = true;
}
//...... plus any other method you want to override
});
Run Code Online (Sandbox Code Playgroud)
当然,这确实意味着任何在其url中包含"youtube.com"的资源都会触发该标志,但是对于我的需要,这就足够了.所以onPause()方法现在看起来像这样:
@Override
public void onPause() {
super.onPause();
// mShouldPause is just a private boolean
if (mShouldPause) {
myCustomWebView.onPause();
}
mShouldPause = false;
}
Run Code Online (Sandbox Code Playgroud)
因此,这是我提出的解决方案,而不会使用反射来处理webview的内部工作.您可能想要创建一个通知,其中包含一个按钮来停止音频或将用户带回您的应用程序,这样用户就不会忘记哪个应用程序发出声音并认为手机闹鬼!
| 归档时间: |
|
| 查看次数: |
2446 次 |
| 最近记录: |