2013-08-28 73 views
3

我想從res/raw文件夾播放音頻文件。
但得到的錯誤
準備失敗:狀態=爲0x1Android播放器提出異常準備失敗:狀態0x1

我的代碼:

package com.example.lvm; 

import java.io.IOException; 

import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
Button introAudio; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
       introAudio=(Button)findViewById(R.id.introAudio); 
       introAudio.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View arg0) { 
           MediaPlayer mp = new MediaPlayer(); 
           String name = "greeting"; 
           mp.setOnCompletionListener(new OnCompletionListener() { 

             @Override 
             public void onCompletion(MediaPlayer mp) { 
              mp.release(); 
             } 

            }); 

           try { 
            mp.setDataSource("android.resource://com.example.lvm/raw/"+name); 
             mp.prepare(); 
             mp.start(); 
           } catch (Exception e) { 
             Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); 
           } 
         } 
       }); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
       // Inflate the menu; this adds items to the action bar if it is present. 
       getMenuInflater().inflate(R.menu.activity_main, menu); 
       return true; 
     } 

} 
+0

我有同樣的問題。但在我的情況下,我下載並保存該文件。文件存在之前,我打電話準備,其他所有流都關閉。如果我稍後再打電話準備,它不會拋出異常。不知道有什麼問題,但還沒有找到解決方案。 文件名只是guid –

+0

像往常一樣,只要我分享我的評論,我找到了一個解決方案。 首先,我檢查DDMS中的日誌以查看有關錯誤的任何其他信息。我在異常之前發現錯誤'無法打開文件'audio/2f32a5de.mp4'。 (沒有這樣的文件或目錄)'。之後,我發現在一個特定情況下,我沒有正確創建完整路徑:) –

回答

4
prepare failed:status 0x1 

,是因爲無論是文件路徑的存在的是錯誤的或不正確的目錄或URL或者Uri發現。

請在您的代碼中嘗試以下內容。

mediaplayer.setDataSrouce(MainActivity.this, Uri.parse("android.resource://com.example.lvm/raw/"+name)); 
//do not add any extension to name, eg. `R.raw.your_raw_file` 

而不是

mp.setDataSource("android.resource://com.example.lvm/raw/"+name); 
+0

我做到了。現在沒有任何異常提出,但我不能聽到這個戲。 – dsharew

+0

你想播放的文件格式是什麼? –

+0

mp3或wav我試過了他們兩個 – dsharew

2

首先,檢查你的文件的名稱。它不能包含大寫字母和特殊字符。刪除該文件,更改名稱並將其複製到環境中。然後在Eclipse中使用Project => Clean函數(R.java應該被重新生成)。您也可以嘗試使用mp.setDataSource("android.resource://com.example.lvm/raw/"+name);而不是mediaplayer.setDataSrouce(MainActivity.this, Uri.parse("android.resource://com.example.lvm/raw/"+name));請記住,不要向名稱添加任何擴展名,例如。 R.raw.your_raw_file

+0

我試過所有的。不用找了。 – dsharew

+0

我不適合我 – Andrea

1

看來創造31準備MediaPlayer是最大的。當您嘗試創建第32個時,調用prepare將失敗,並顯示此錯誤。

如果是這樣的情況下,如何解決這一問題:

  1. 調用release沒用MediaPlayer;
  2. 限制您可以創建多少個MediaPlayer。例如,如果您正在使用隊列,請嘗試ArrayBlockingQueue<T>
  3. 抓住IOException e,檢查"Prepare failed.: status=0x1".equals(e.getMessage()),如果是這樣重試。
+0

...........第32個 –

+1

那麼我的意思是32。 :P – Mygod

相關問題