在Android中使用

问题描述:

一个字符串/字节播放音频

我一直在试图通过Android的使用MediaPlayer的字符串/字节播放音频,但能达到我使用的result.The代码在Android中使用

` 
    String ret = ""; 
    try { 
     InputStream inputStream = this.openFileInput(Name); 

     if (inputStream != null) { 
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
      String receiveString = ""; 
      StringBuilder stringBuilder = new StringBuilder(); 

      while ((receiveString = bufferedReader.readLine()) != null) { 
       stringBuilder.append(receiveString); 
      } 

      inputStream.close(); 
      ret = stringBuilder.toString(); 

      String url = "data:audio/mp3;base64,"+ret; 
      MediaPlayer mediaPlayer = new MediaPlayer(); 
      mediaPlayer.setDataSource(url); 
      mediaPlayer.prepare(); 
      mediaPlayer.start(); 

     } 

    } 
    catch (FileNotFoundException e) { 
     Toast.makeText(this, "File not found", Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     Toast.makeText(this,String.valueOf(e), Toast.LENGTH_LONG).show(); 
    } 
    catch (Exception e) 
    { 
     Toast.makeText(this,String.valueOf(e),Toast.LENGTH_LONG).show(); 
    }` 

的文件在的Base64编码是从服务器上保存的歌曲。 我正在注册的例外是java.io.ioexception prepare failed status=0x800000000

我可以使用MediaPlayer使用字符串/字节播放音频吗?如果不是,有没有什么解决办法可以让我发挥同样的作用。请帮忙。

[编辑] Android - Playing mp3 from byte[]这接受的答案适用于me.But有播放音频,而无需创建一个临时文件的任何其他方式?

要调用mediaPlayer.setDataSource(URL)方法。这里的网址(字符串)必须是一个有效的互联网网址。您正在尝试以String的形式传递数据。

其次,你有没有叫调用prepare()方法之前

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

方法。此方法是必须调用的方法,以使目标流类型生效。

你可以做一个MediaPlayer的三种方式工作。看看他们在下面的例子:

MediaPlayer mediaPlayer = new MediaPlayer(); 
    File file = new File("");// if you have a file object representing your audio file, you can start from here. 
    Uri uri = Uri.fromFile(file);// if you have a valid uri representing your audio file (may be obtained from a content provider or any other means etc), you can start from here 
    try { 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mediaPlayer.setDataSource(this,uri); 
     mediaPlayer.prepare(); // or mediaPlayer.prepareAsync(); 
     mediaPlayer.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

如果你有一个有效的互联网UrlString则:

MediaPlayer mediaPlayer = new MediaPlayer(); 
    String urlString = "http://...";// like this 
    try { 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mediaPlayer.setDataSource(urlString); 
     mediaPlayer.prepare(); // or mediaPlayer.prepareAsync(); 
     mediaPlayer.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

您不需要在输入/输出流和所有的坑害。

然后,沿着这条代码尝试:

byte[] byteArray = // your byteArray 
    try { 
     File file = File.createTempFile("prefix","suffix");//creates temporary file 
     FileOutputStream fos = new FileOutputStream(file); 
     fos.write(byteArray);//your bytes written in that temporary file 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

从这里你可以初始化你的MediaPlayer,并使用这个临时文件。

+0

好,我有一个变量(二者串字节[]),其值是audio.I的编码数据需要使用这个变量来播放音频。 – Jops