Monzer Yaghi
Monzer Yaghi

Reputation: 1300

Android media player error with the prepare statement

I'm trying to show a progress dialog while an audio is being played from the raw folder in my application, I wrote the code below:

 package com.example.test;

    import java.io.IOException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.MediaController;
import android.widget.Toast;

public class Playaudio extends Activity {
  private static final String TAG = "AudioPlayer";

 // public static final String AUDIO_FILE_NAME = "android.resource://com.example.test/raw/paulemma.mp3";

  ProgressDialog pd;

  private MediaPlayer mediaPlayer;
  private MediaController mediaController;
 // private String audioFile;

  private Handler handler = new Handler();
String ex="";
String ex2="";
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playmedia);

    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

        @Override
        protected void onPreExecute() {

      pd = new ProgressDialog(Playaudio.this);
            pd.setTitle("Processing...");
            pd.setMessage("Please wait.");
            pd.setIndeterminate(true);
            pd.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            try {
                //Do something...
                //Thread.sleep(5000);
                  try 
                  {
                       mediaPlayer=new MediaPlayer();
                      mediaPlayer.setDataSource("android.resource://com.example.test/raw/paulemma.mp3");
                      mediaPlayer.prepare();
                      mediaPlayer.start();
                  } 
                  catch (IOException e) {
                      ex=e.toString();

                  }


            } catch (Exception e) {
                // TODO Auto-generated catch block
                ex2=e.toString();
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (pd!=null) {
                pd.dismiss();

                Toast.makeText(getApplicationContext(), ex, Toast.LENGTH_LONG).show();
                Toast.makeText(getApplicationContext(), ex2, Toast.LENGTH_LONG).show();
                //b.setEnabled(true);
            }
        }

    };
    task.execute((Void[])null);

  }


  //--------------------------------------------------------------------------------




}

The audio isn't being played and it's giving me the following error : java.io.IOException Prepare failed:status 0X1 Any help please ?

Upvotes: 0

Views: 1043

Answers (1)

Mike M.
Mike M.

Reputation: 39191

The MediaPlayer#setDataSource(String) method expects a path to a file, which a Resource within your package is not. You can parse your String as a URI, and use an overload:

Uri uri = Uri.parse("android.resource://com.example.test/raw/paulemma.mp3");
mediaPlayer.setDataSource(this, uri);

Or, you can use the static MediaPlayer.create() method with a Resource id to create a prepared player:

mediaPlayer = MediaPlayer.create(this, R.raw.paulemma);

With the second method, you do not need to call setDataSource() or prepare().

Upvotes: 1

Related Questions