2013-08-28 77 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

相关问题