当前位置: 首页 > 知识库问答 >
问题:

设备锁定时停止android应用程序音频播放

胡彭亮
2023-03-14

我有一个情况,我们有一个使用网络视图的Android应用程序。当用户导航到YouTube视频时,它开始播放(带有音频),然后用户使用设备的硬件开关锁定设备,它会继续播放音频。

当应用程序使用设备菜单发送到后台或退出应用程序时,不会发生这种情况。

有人知道为什么会发生这种情况以及如何阻止它吗?

编辑:我刚刚在这里发现了一个类似的、未回答的帖子:应用程序支持视频的后台播放、科尔多瓦问题、谷歌播放拒绝应用程序

共有1个答案

易衡
2023-03-14

我对Google拒绝该应用程序也有同样的问题,因为当您按下电源按钮关闭屏幕时,webview会继续播放youtube视频中的音频。

出于某种原因,按下电源按钮似乎不会触发webview的onPawn(),这就是音频继续播放的原因。虽然这对于在屏幕关闭时保持音乐播放很有用,但Google不喜欢youtube视频的这种行为。

为了让Google满意,您可以覆盖活动/片段的onPause(),如下所示:

@Override
public void onPause() {
    super.onPause();
    myCustomWebView.onPause();
}

按下电源按钮也会触发webview的onPause()。然而,这又产生了另一个问题:当屏幕关闭时,您实际上想要继续播放的音频如何?

我想出的一个修复方法是覆盖WebViewClient的onLoadResources(),这允许我检查资源是否来自youtube,这决定了是否应该在时间到来时调用webview的onPance()。类似于这样:

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

});

当然,这确实意味着任何在其url中有“youtube.com”的资源都将触发标志,但对于我的需要来说,这就足够了。所以onPance()方法现在看起来像这样:

@Override
public void onPause() {
    super.onPause();
    // mShouldPause is just a private boolean
    if (mShouldPause) {
        myCustomWebView.onPause();
    }
    mShouldPause = false;
}

因此,这就是我提出的解决方案,它没有使用反射来干扰webview的内部工作。您可能希望创建一个通知,该通知具有停止音频的按钮或将用户带回您的应用程序,以便用户不会忘记哪个应用程序发出声音,并认为手机闹鬼!!!

 类似资料:
  • 我的问题改变了一点,请看看下面的EDIT 2 我正在学习如何在Android上使用服务和录音。 我想创建一个应用程序,除了启动服务什么也不做:在请求权限(,)后,应用程序只从调用。 然后,该服务将录制音频并将其传输到给定的IP地址。我从这个问题的答案中获得了对音频流服务器和客户端的灵感。到目前为止,我正在Android Studio Emulator上测试Android 6.0上的应用程序。 这是

  • 函数名称:停止播放音频 函数功能: 停止播放音频 函数方法 media.stop() 返回值 类型 说明 flag boolean true - 正在播放音频,false - 未播放 函数用例 media.playAudio("/sdcard/TouchSprite/res/1.mp3") mSleep(2000) media.stop() flag = media.isPlaying() if

  • 我的应用程序中有一项服务。它发送和接收webservice请求和响应。当我收到来自web服务的特定响应时,我需要停止播放音频/视频文件(媒体文件正在从另一个应用程序播放)。当我完成某个过程时,我需要再次恢复。 注: 在andoid设备中,如果任何2G呼叫停止播放媒体文件,则音乐播放器播放任何音乐,然后当2G呼叫断开时,停止播放媒体文件。我只需要这样做。

  • 我正在做一个简单的媒体录制/播放器应用程序,录制部分已成功完成。但现在我对媒体播放器的角色有了问题。让我告诉你这些问题: 当我尝试用媒体播放器播放媒体文件时,会显示如下准备错误: JAVAio。IOException:准备失败:状态=0x1 我如何解决这个问题? 我的三门课: -RecordFragment.java: 播放片段。java: -播放适配器。java:

  • 我一直无法让应用程序录制音频,同时让iPhone音乐应用程序通过蓝牙扬声器播放。 例如,如果我这样做: 然后音乐应用程序将开始通过iPhone内置的扬声器播放音乐,而不是通过蓝牙。换句话说,似乎没有办法在应用程序中录制音频的同时还允许通过蓝牙播放音乐。 如果我删除AVAudioSessionColloryOptionDefaultToSpeaker,那么音频路由将切换到接收器。这比让它通过iPho

  • 如何继续播放视频时,我们按下主页按钮和应用程序转到后台?那时,我们仍然可以听音频并在另一个应用程序上工作。我们应该添加服务来控制视频播放吗?