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

Android MediaPlayer无法设置数据源uri

商华藏
2023-03-14

我试图存储以前播放过的歌曲的uri,使用share d首选项。但是当为了播放歌曲而获取和重建uri时,我会收到以下错误消息:

05-03 20:43:14.642 8617-8716/com.stopwatch.appW/MediaPlayer:无法在客户端打开文件;尝试服务器端:java.lang.安全异常:权限拒绝:打开提供程序com.android.providers.media.MediaDocumentsProvider from ProcessRecord{2c95b0 8617:com.stopwatch.app/u0a175}(pid=8617, uid=10175)需要android.permission.MANAGE_DOCUMENTS或android.permission.

05-03 20:43:14.658 8617-8716/com.stopwatch.appI/MediaPlayer: setDataSource(content://com.android.providers.media.documents/document/audio: 18504)

05-03 20:43:14.661 8617-8716/com。秒表应用程序E/媒体播放器:无法创建媒体播放器

05-03 20:43:14.662 8617-8716/com。秒表带系统的应用程序。错误:java。io。IOException:setDataSource失败:状态=0x8000000

我不知道我需要Android系统。准许MANAGE\u DOCUMENTS和my IDE告诉我,这是一种仅适用于系统应用程序的权限。我的代码如下所示:

if(prefs.contains("AudioFile")){
        try {
            String UriString = prefs.getString("AudioFile", null);
            Uri uri = Uri.parse(UriString);
            mediaPlayer.setDataSource(this, uri);
            Gdx.app.log("Android Media Player", "Successfully got data");
        } catch (IOException e) {
            e.printStackTrace();
            Gdx.app.log("Android Media Player", e.getMessage());
        }
        try {
            mediaPlayer.prepare();
            Gdx.app.log("Android Media Player", "Successfully prepared content");
        } catch (IOException e) {
            e.printStackTrace();
            Gdx.app.log("Android Media Player", e.getMessage());
        }
    }

我尝试过在onCreate方法(这似乎是个坏主意)和通过另一个在按钮单击时调用的方法运行它,两者都失败了。

请注意,如果我启动应用程序并通过启动mediaPlayer的意图检索uri,请执行以下操作:

protected void onActivityResult (int requestCode, int resultCode, Intent data){
    if(requestCode == MUSIC_REQUEST){
        if(resultCode == RESULT_OK){
            Uri myUri = data.getData();
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("AudioFile", myUri.toString());
            editor.commit();
            System.out.println(myUri);
            try {
                mediaPlayer.setDataSource(this, myUri);
                Gdx.app.log("Android Media Player", "Succesfully got data");
            } catch (IOException e) {
                e.printStackTrace();
                Gdx.app.log("Android Media Player", e.getMessage());
            }
            try {
                mediaPlayer.prepare();
                Gdx.app.log("Android Media Player", "Succesfully prepared content");
            } catch (IOException e) {
                e.printStackTrace();
                Gdx.app.log("Android Media Player", e.getMessage());
            }
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

我没有问题,即使我用mediaPlayer.setDataSource(this, Uri.parse(myUri.toString))代替。

共有1个答案

公冶鸣
2023-03-14

您不能持久化Uri值,并期望它稍后工作。那些拥有内容方案的用户可以在很短的时间内访问内容。

如果您正在使用ACTION\u OPEN\u DOCUMENT获取您的Uri,您可以通过内容解析程序上的takePersistableUriPermission()请求对内容的长期访问。不过,您仍然需要处理用户可能移动或删除内容的可能性。

如果您使用ACTION_GET_CONTENT获取Uri,请切换到ACTION_OPEN_DOCUMENT(如果您的minSdkVersion为19或更高)或复制内容,然后使用您的副本。

 类似资料:
  • 我的项目使用MySQL、JavaFX、Spring Boot、Spring Data JP和Hibernate框架/技术。 这是我的POM文件。 这是我的。属性配置。 这是我的主课 这是stacktrace: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatifiedPendencyException:创建名为“org”的bean时出错。sprin

  • 嗨,我正在尝试使用jndi数据源。下面是代码 context.xml 在spring servlet配置bean中是: 我得到这个错误 org.springframework.beans.factory.beanCreationException:创建名为“Contact Controller”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.B

  • 我以前从未与spring security达成过协议,但我需要使用它。我不能配置它。 我的applicationContext-security.xml: 我的web.xml: 但是我有:org.xml.sax.saxParseException;亚麻编号:61;专栏编号:227;CVC-complex-type.3.2.2:属性'data-source-ref'不允许出现在元素'security

  • 问题内容: 我正在尝试设置一些jUnit测试。我们的数据库由服务器使用JNDI连接。我们在root.xml中有一个描述设置的xml。如何设置jUnit以连接数据库?我希望它只是从root.xml中读取内容,但是无论如何我都愿意进行设置。 问题答案: 我发现最好的方法是使用称为Simple- Jndi的 东西。 我将此添加到Maven文件中: 您可以在此处下载软件包,下载内容包含说明手册。 http

  • 我在pom下面有这个。xml文件。我在尝试运行应用程序时收到此错误消息。未能配置数据源:“url”属性未指定,无法配置嵌入式数据源。 我在谷歌上搜索过,很少有人说这个问题不应该出现在内存数据库版本中,比如H2、Derby等。然而,我遇到了这个问题。 尝试更新application.properties 和 但是没有喘息的机会。请让我知道我错过了什么/在哪里。

  • 运行该命令后,我没有看到任何输出,也没有看到名为的系统环境变量(它应该出现在那里吗?)。 当我尝试运行一些基本的示例代码时: 即使在手动将该值添加到系统环境变量之后,我也会得到相同的错误。