Skip to content

Instantly share code, notes, and snippets.

@jonjensen
Created March 2, 2011 07:27
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save jonjensen/850599 to your computer and use it in GitHub Desktop.
Save jonjensen/850599 to your computer and use it in GitHub Desktop.
simplified example of Android sound player
/**
* Convenience method to create a MediaPlayer for a given resource id.
* On success, {@link #prepare()} will already have been called and must not be called again.
* <p>When done with the MediaPlayer, you should call {@link #release()},
* to free the resources. If not released, too many MediaPlayer instances will
* result in an exception.</p>
*
* @param context the Context to use
* @param resid the raw resource id (<var>R.raw.&lt;something></var>) for
* the resource to use as the datasource
* @return a MediaPlayer object, or null if creation failed
*/
public static MediaPlayer create(Context context, int resid) {
try {
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
if (afd == null) return null;
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mp.prepare();
return mp;
} catch (IOException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (IllegalArgumentException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
} catch (SecurityException ex) {
Log.d(TAG, "create failed:", ex);
// fall through
}
return null;
}
package com.locateexpress.app;
import java.util.HashSet;
import android.content.Context;
import android.media.MediaPlayer;
import android.util.Log;
final class PlaySound {
private static HashSet<MediaPlayer> mpSet = new HashSet<MediaPlayer>();
static void play(Context context, int resId) {
MediaPlayer mp = MediaPlayer.create(context, resId);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mpSet.remove(mp);
mp.stop();
mp.release();
}
});
mpSet.add(mp);
mp.start();
}
static void stop() {
for (MediaPlayer mp : mpSet) {
if (mp != null) {
mp.stop();
mp.release();
}
}
mpSet.clear();
}
}
package com.locateexpress.app;
import java.util.HashSet;
import java.io.IOException;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.util.Log;
final class PlaySound2 {
private static HashSet<MediaPlayer> mpSet = new HashSet<MediaPlayer>();
static void play(Context context, int resId) {
try {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(context, Uri.parse("android.resource://" + Config.PACKAGE + "/" + resId));
mp.setAudioStreamType(AudioManager.STREAM_RING);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mpSet.remove(mp);
mp.stop();
mp.release();
}
});
mp.prepare();
mpSet.add(mp);
mp.start();
} catch (IOException e) {
if (Config.DEBUG) Log.e(Config.APP_NAME, "Error playing audio resource", e);
}
}
static void stop() {
for (MediaPlayer mp : mpSet) {
if (mp != null) {
mp.stop();
mp.release();
}
}
mpSet.clear();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment