Reputation: 1300
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
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