Created
March 2, 2011 07:27
-
-
Save jonjensen/850599 to your computer and use it in GitHub Desktop.
simplified example of Android sound player
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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.<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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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