2012-07-30 53 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