3

我正在尝试从 res/raw 文件夹播放音频文件。
但得到错误
准备失败:状态= 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;
        }

}
4

3 回答 3

4
prepare failed:status 0x1

发生是因为文件路径错误或目录不正确或找到了 Url 或 Uri。

尝试在您的代码中执行以下操作。

 mediaplayer.setDataSource(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);
于 2013-08-28T20:01:22.367 回答
1

似乎创建31个准备MediaPlayer是最大的。当您尝试创建第 32 个并调用prepare时,将失败并出现此错误。

如果是这种情况,如何解决此问题:

  1. 调用release无用MediaPlayer
  2. 限制MediaPlayer您可以创建的数量。例如,如果您正在使用队列,请尝试ArrayBlockingQueue<T>.
  3. 抓住IOException e,检查"Prepare failed.: status=0x1".equals(e.getMessage()),如果是,重试。
于 2014-08-27T19:36:15.507 回答
1

首先,检查文件的名称。它不能包含大写字母和特殊字符。删除该文件,更改名称并再次将其复制到环境中。然后在 EclipseProject => 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

于 2013-08-28T20:10:33.660 回答