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

Android媒体播放器不会加载路径 /documents/audio的Uri:1159

艾原
2023-03-14

我正在尝试在Android Studio中使用内置的mediaplayer播放音频文件。我使用下面的代码调用一个intent并打开一个第三方文件管理器来获取一个文件Uri以及我存储在某处的文件路径。无论如何,如果我使用像ES file Explorer这样的文件管理器,我会得到一个类似“/sdcard/some directory/test.mp3”的路径。然而,如果我使用内置的文件管理器,我会得到一个类似“/documents/audio:1159”的路径。我知道后者是一种“资产”,但当我尝试将其输入mediaplayer时,我遇到了一个例外。我做错了什么?

下面的代码显示了我用来获取文件路径的意图方法,下面的代码显示了我如何使用该文件路径来获取Uri并将其输入媒体播放器。只是为了清楚起见,像“/sdcard/一些目录/test.mp3”这样的文件路径可以正常工作。像“/Document/audi: 1159”这样的文件路径不行。

final View.OnClickListener mGlobal_OnClickListener = new View.OnClickListener() {
public void onClick(final View v) {

    int resID2 = v.getId();

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("audio/*");
    try {
        startActivityForResult(intent,resID2); }
    catch (Exception e) {
        Toast.makeText(getApplicationContext(), "Please install a file manager",Toast.LENGTH_LONG).show();
    }
}

};

public void onActivityResult(int requestCode、int resultCode、Intent result){

if (resultCode == RESULT_OK)
{
    Uri data = result.getData();
    String thePath = data.getPath();
    // Do something with the file path
}

}

用于根据从上面检索到的文件路径启动mediaplayer的代码

Uri myUri = Uri.parse(filePath);

mediaPlayer = new MediaPlayer();    
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
    mediaPlayer.setDataSource(getApplicationContext(), myUri);
    mediaPlayer.prepare();  
    mediaPlayer.start();
} catch (IOException e) {} 

共有1个答案

邹涵畅
2023-03-14

我想你不能像这样使用Uri

/文件/音频:1159

使用Intent MediaPlayer时

编辑:尝试此代码从资产文件夹获取filepath

AssetManager am = getAssets();
InputStream inputStream = am.open(file:///android_asset/myfoldername/myfilename);
File file = createFileFromInputStream(inputStream);

private File createFileFromInputStream(InputStream inputStream) {

   try{
      File f = new File(my_file_name);
      OutputStream outputStream = new FileOutputStream(f);
      byte buffer[] = new byte[1024];
      int length = 0;

      while((length=inputStream.read(buffer)) > 0) {
        outputStream.write(buffer,0,length);
      }

      outputStream.close();
      inputStream.close();

      return f;
   }catch (IOException e) {
         //Logging exception
   }

return null;
}
 类似资料:
  • 我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?

  • 当我一次又一次点击播放按钮时,它会同时播放多次。我想停止多重播放。这是代码: 媒体播放器和按钮的对象 按钮单击事件监听器以播放音频 按钮单击事件侦听器以停止音频 任何帮助都将不胜感激。谢谢

  • 我有一个简单的播放器和录音机。一切都很好,但都有一个问题。我想添加搜索栏来查看播放记录的进度,并使用此搜索栏设置玩家应该播放的位置。我有进步,但没有效果。这是代码: 你知道如何使用seek bar来查看进度和设置记录的位置吗?

  • 我正在编写一个,其中我提供了功能,几乎满足了我的需求,但面临一些小问题。 我是如何实现我的音乐播放器的: 正在列出SD卡中可用的音频歌曲(路径类似:) 一旦用户点击任何音频,然后启动媒体播放器 在媒体播放器屏幕中,我为用户提供了返回音频列表的导航 用户返回,现在选择了一些其他歌曲来听(这里我面临的问题是,用户将可以播放新选择的歌曲,但也会播放旧歌曲,而一次只能播放上一次选择的歌曲,但在我的情况下,

  • 我正在寻找一个开源媒体播放器或Android应用编程接口,可以支持MPEG-DASH及其修正案,如平铺视频的空间关系描述(SRD)功能。有什么建议吗? 我以为Android的API支持DASH,但显然它不支持。他们提倡一种叫做ExoPlayer(http://google.github.io/ExoPlayer/)的播放器,它支持DASH、平滑流等等。我想知道它是否支持DASH的所有功能,如SRD