Android player raising exception prepare failed:status 0x1

南笙酒味 提交于 2019-12-23 15:37:49

问题


I am trying to play audio file from res/raw folder.
but getting the error
prepare failed: status = 0x1

My code:

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;
        }

}

回答1:


prepare failed:status 0x1

is occuring because of either file path is in error or incorrect directory or Url or Uri found.

Try following in your code.

 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` 

Instead of

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



回答2:


First, check the name of your file. It cannot contains capital letter and special characters. Remove that file, change name and copy it to environment again. Then use in Eclipse Project => Clean function (R.java should be regenerated). You can also try to use mp.setDataSource("android.resource://com.example.lvm/raw/"+name); instead of mediaplayer.setDataSrouce(MainActivity.this, Uri.parse("android.resource://com.example.lvm/raw/"+name)); Remember that do not add any extension to name, eg. R.raw.your_raw_file




回答3:


It seems creating 31 prepared MediaPlayer is the maximum. When you are trying to create the 32th and invoked prepare will fail with this error.

If this is the case, how to fix this:

  1. Invoke release on useless MediaPlayer;
  2. Limit how many MediaPlayer you can create. For example if you are using a queue, try ArrayBlockingQueue<T>.
  3. Catch the IOException e, check "Prepare failed.: status=0x1".equals(e.getMessage()), if so retry.


来源:https://stackoverflow.com/questions/18496448/android-player-raising-exception-prepare-failedstatus-0x1

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!