Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android mediaplayer赢得';t加载路径为/documents/audio:1159的Uri_Java_Android_Audio_Android Intent_Android Studio - Fatal编程技术网

Java Android mediaplayer赢得';t加载路径为/documents/audio:1159的Uri

Java Android mediaplayer赢得';t加载路径为/documents/audio:1159的Uri,java,android,audio,android-intent,android-studio,Java,Android,Audio,Android Intent,Android Studio,我正在尝试在Android Studio中使用内置mediaplayer播放音频文件。我使用下面的代码调用一个intent并打开一个第三方文件管理器来获取一个文件Uri以及我存储在某处的文件路径。无论如何,如果我使用像ES file Explorer这样的文件管理器,我会得到一个类似“/sdcard/some directory/test.mp3”的路径。但是,如果我使用内置的文件管理器,我会得到一个类似“/documents/audio:1159”的路径。我知道后者是一种“资产”,但当我尝试将

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

下面的代码显示了我用于获取文件路径的intent方法,下面的代码显示了我如何使用该文件路径获取Uri并将其提供给mediaplayer。只是为了清楚起见,像“/sdcard/some directory/test.mp3”这样的文件路径可以正常工作。像“/documents/audio:1159”这样的文件路径不适用

})

ActivityResult上的公共void(int请求代码、int结果代码、意图结果){

}

用于根据从上面检索到的文件路径启动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) {} 

我想你不能像这样使用Uri

/文件/音频:1159

何时使用Intent MediaPlayer

编辑: 请尝试使用此代码从资产文件夹获取文件路径

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;
}

谢谢,但有什么办法吗?我是否可以将资产路径转换为实际的文件路径?或者有没有一种不同的方式将其输入mediaplayer?非常有趣。今晚将尝试一下。在Android studio中似乎无法实现此功能,但无论如何。。。谢谢你的帮助。几乎可以肯定是我。
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) {} 
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;
}