知乎专栏 |
播放一段特效声音,例如铃音,可以在点击按钮德时候调用 playSound()
private void playSound(){ MediaPlayer mediaPlayer = MediaPlayer.create(FlashLightActivity.this, R.raw.alert); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub mediaPlayer.release(); } }); mediaPlayer.start(); }
播放 res 中的资源文件
AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(R.raw.music); public void play(AssetFileDescriptor assetFileDescriptor) { if (mediaPlayer != null) { try { this.reset(); mediaPlayer.setDataSource(assetFileDescriptor); // 或使用这种方式 mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); mediaPlayer.prepare(); //注意不能使用异步,异步方式是用来播放网络流音乐 // mediaPlayer.prepareAsync(); assetFileDescriptor.close(); } catch (IOException e) { throw new RuntimeException(e); } mediaPlayer.start(); } }
播放 assets 文件夹中的资源
//实例化播放器 MediaPlayer mediaPlayer = new MediaPlayer(); AssetManager am = getAssets(); try { AssetFileDescriptor afd = am.openFd("assets_video.mp4"); mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); } catch (IOException e) { e.printStackTrace(); } //设置准备就绪状态监听 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // 开始播放 mediaPlayer.start(); } }); //准备播放 mediaPlayer.prepareAsync();
其他方式获得 assets 文件夹中的资源
String url = "file:///android_asset/" + "video.mp3"; AssetFileDescriptor assetFileDescriptor = null; try { assetFileDescriptor = context.getResources().getAssets().openFd("nepal.mp3"); } catch (IOException e) { throw new RuntimeException(e); }
//需将资源文件放在assets文件夹 AssetFileDescriptor fd = getAssets().openFd("samsara.mp3"); mMediaPlayer.setDataSource(fd) mMediaPlayer.prepare() AssetFileDescriptor fd = getAssets().openFd("samsara.mp3"); mMediaPlayer.setDataSource(fd, fd.getStartOffset(), fd.getLegth()) mMediaPlayer.prepare();
package cn.netkiller.demo.skill; import android.media.MediaPlayer; import android.util.Log; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.IOException; public class Bible { private static final String TAG = Bible.class.getSimpleName(); public Bible(JSONArray array) { Log.i(TAG, array.toString()); JSONObject item = (JSONObject) array.get(1); String url = item.getString("url"); Log.i(TAG, "Audio url: " + url); MediaPlayer mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(url);//设置播放来源 } catch (IOException e) { throw new RuntimeException(e); } mediaPlayer.prepareAsync();//异步准备 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { //异步准备监听 @Override public void onPrepared(MediaPlayer mediaPlayer) { Log.i(TAG, "Voice异步文件时长: " + mediaPlayer.getDuration() / 1000 + ""); mediaPlayer.start();//播放 } }); mediaPlayer.setScreenOnWhilePlaying(true);// 设置播放的时候一直让屏幕变亮 mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { //文件缓冲监听 @Override public void onBufferingUpdate(MediaPlayer mediaPlayer, int i) { Log.i(TAG, "Voice进度: " + i + "% Voice文件长度" + mediaPlayer.getDuration() / 1000 + ""); } }); } }
package cn.netkiller.demo.skill; import android.media.MediaPlayer; import android.util.Log; import androidx.annotation.NonNull; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.IOException; public class Bible { private static final String TAG = Bible.class.getSimpleName(); private static MediaPlayer mediaPlayer; public synchronized static MediaPlayer getInstance() { if (mediaPlayer == null) mediaPlayer = new MediaPlayer(); return mediaPlayer; } public Bible(@NonNull JSONArray array) { // Log.i(TAG, array.toString()); JSONObject item = (JSONObject) array.get(1); String url = item.getString("url"); // Log.i(TAG, "Audio url: " + item.toString()); MediaPlayer mediaPlayer = Bible.getInstance(); try { mediaPlayer.reset(); mediaPlayer.setDataSource(url);//设置播放来源 } catch (IOException e) { throw new RuntimeException(e); } mediaPlayer.prepareAsync();//异步准备 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { //异步准备监听 @Override public void onPrepared(MediaPlayer mediaPlayer) { Log.i(TAG, "Voice 播放异步文件,时长: " + mediaPlayer.getDuration() / 1000 + " Audio: " + item.toString()); mediaPlayer.start();//播放 } }); mediaPlayer.setScreenOnWhilePlaying(true);// 设置播放的时候一直让屏幕变亮 mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { //文件缓冲监听 @Override public void onBufferingUpdate(MediaPlayer mediaPlayer, int i) { Log.i(TAG, "Voice 缓冲区加载进度: " + i + "%"); } }); } }