2012-07-30 52 views
0

我试图获取mp3文件并将其保存在手机内存中,而不是SD卡,然后立即使用媒体播放器播放。这个代码在我以前用它在SD卡上做同样的事情时效果很好,所以看起来在保存和读取mp3的位置可能会有一些错误。使用Android媒体播放器从手机内存中写入和播放媒体

这里是我的代码:

try { 

      MediaPlayer player = new MediaPlayer(); 
      URI uri = null; 
      try { 
       uri = new URI(
         "http://translate.google.com/translate_tts?tl=" 
           + oLanguage + "&q=" + text); 
      } catch (URISyntaxException e) { 
       e.printStackTrace(); 
      } 

      String FileName = "Audio2.mp3"; 
      URL u = new URL(uri.toASCIIString()); 
      HttpURLConnection c = (HttpURLConnection) u.openConnection(); 
      c.setRequestMethod("GET"); 
      c.setDoOutput(true); 
      c.connect(); 

//   FileOutputStream f = new FileOutputStream(new File(
//     Environment.getExternalStorageDirectory() 
//       + "/download/" + FileName)); 

      FileOutputStream f = openFileOutput(FileName, MODE_PRIVATE);     
      InputStream in = c.getInputStream(); 
      byte[] buffer = new byte[1024]; 
      int len1 = 0; 
      while ((len1 = in.read(buffer)) > 0) { 
       f.write(buffer, 0, len1); 
      } 
      f.close(); 

//   player.setDataSource(Environment.getExternalStorageDirectory() 
//      + "/download/" + FileName); 

      player.setDataSource("/data/data/com.comm/files/" + FileName);    
      player.prepare(); 
      player.start() 

的logcat:

 07-30 12:23:47.319: W/MediaPlayer(22426): info/warning (1, 26) 
    07-30 12:23:47.319: E/MediaPlayer(22426): error (1, -4) 
    07-30 12:23:47.319: W/System.err(22426): java.io.IOException: Prepare failed.: status=0x1 
    07-30 12:23:47.329: W/System.err(22426): at android.media.MediaPlayer.prepare(Native Method) 
    07-30 12:23:47.329: W/System.err(22426): at com.comm.Connect.Text(Connect.java:396) 
    07-30 12:23:47.329: W/System.err(22426): at com.comm.Connect$7.onClick(Connect.java:233) 
    07-30 12:23:47.329: W/System.err(22426): at android.view.View.performClick(View.java:2485) 
    07-30 12:23:47.329: W/System.err(22426): at android.view.View$PerformClick.run(View.java:9080) 
    07-30 12:23:47.329: W/System.err(22426): at android.os.Handler.handleCallback(Handler.java:587) 
    07-30 12:23:47.329: W/System.err(22426): at android.os.Handler.dispatchMessage(Handler.java:92) 
    07-30 12:23:47.329: W/System.err(22426): at android.os.Looper.loop(Looper.java:130) 
    07-30 12:23:47.329: W/System.err(22426): at android.app.ActivityThread.main(ActivityThread.java:3687) 
    07-30 12:23:47.329: W/System.err(22426): at java.lang.reflect.Method.invokeNative(Native Method) 
    07-30 12:23:47.329: W/System.err(22426): at java.lang.reflect.Method.invoke(Method.java:507) 
    07-30 12:23:47.329: W/System.err(22426): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
    07-30 12:23:47.329: W/System.err(22426): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
    07-30 12:23:47.329: W/System.err(22426): at dalvik.system.NativeStart.main(Native Method) 

最后,我需要指定任何权限,让我保存到手机内存?

回答

0

做年代后ome研究似乎我需要使用我发现我需要使用输入流下面的代码解决了问题

 FileOutputStream f = null; 
      try { 
       f = openFileOutput(FileName, MODE_PRIVATE); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      InputStream in = c.getInputStream(); 
      byte[] buffer = new byte[1024]; 
      int len1 = 0; 
      while ((len1 = in.read(buffer)) > 0) { 
       f.write(buffer, 0, len1); 
      } 
      f.close(); 

      player = new MediaPlayer(); 
      FileInputStream fis = new FileInputStream("/data/data/com.comm/files/"+ FileName); 
      player.reset(); 
      player.setDataSource(fis.getFD()); 
      player.prepare(); 
      player.start(); 
      fis.close(); 
0

几件事情:

  1. 什么是外键锁是什么样子?确保你在做 一些有用的东西,如捕捉异常并将 堆栈迹线分出来,这将更加有用,并且应该给你更多的 描述性错误
  2. 如果你正在尝试写任何东西磁盘,请确保您有 android.permission.WRITE_EXTERNAL_STORAGEmanifest文件

尝试,并获得美国堆栈跟踪,这将有助于我们帮助

+0

我已经有权限。我更新了我的问题以显示logcat的输出 – Amanni 2012-07-30 11:36:14