一、播放应用内的音频文件及视频
用媒体播放者MediaPlayer.creta(this,R.音频文件)创建音频,
实例化媒体播放者设置音频类型。mediaPlayer.setAudioStreamType
(AudioManager.STREAM_MUSIC);
mediaPlayer.start();开始播放
mediaPlayer.isPlaying();正在播放
mediaPlayer.pause();暂停播放
mediaPlayer.getDuration();音乐播放时长
mediaPlayer.getCurrentPostion();获取当前播放位置
mediaPlayer.seekTo();设置播放到的位置(从该位置继续播放)
public class MainActivity extends AppCompatActivity {
private SeekBar seekBar;
private SurfaceView surfaceview;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = (SeekBar) findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean
fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress=seekBar.getProgress();
//设置播放到的位置(从该位置继续播放)
mediaPlayer.seekTo(progress);
}
});
surfaceview = (SurfaceView) findViewById(R.id.sv);
}
public void play(View view){
ImageButton imageButton= (ImageButton) view;
if (mediaPlayer==null) {
mediaPlayer = new MediaPlayer();
//建立应用内的音频
mediaPlayer = MediaPlayer.create(this, R.raw.love);
//设置音频流的类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//播放内存卡中的视屏
// 设置源mediaPlayer.setDataSource(this,Uri.parse("file://"播放的视频的位置));
//mediaPlayer.prepare();加载准备
//将媒体播放捕捉的画面展示到SurfaceView
mediaPlayer.setDisplay(surfaceview.getHolder);
//开始
mediaPlayer.start();
//改变成播放的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐播放时长
int duration=mediaPlayer.getDuration();
//给进度条设置最大值
seekBar.setMax(duration);
new Mythreath().start();
}else if(mediaPlayer.isPlaying()){//如果正在播放
mediaPlayer.pause();//停止播放
//改变图标
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
class Mythreath extends Thread{
@Override
public void run() {
super.run();
while(seekBar.getProgress()<=seekBar.getMax()){
//得到音乐播放当前位置
int current=mediaPlayer.getCurrentPosition();
//设置当前进度
seekBar.setProgress(current);
}
}
}
}
二、播放内存卡中的音乐
设置音源mediaPlayer.setDataSource(this,Uri.parse(“file://”播放的音乐的位置));
mediaPlayer.prepare();加载准备
mediaPlayer.setOnPreparedListener(){};设置完成准备的监听
三、播放网络音乐
设置音源mediaPlayer.setDataSource(this,Uri.parse(“http://”播放的音乐的来源);
);
mediaPlayer.prepareAsync();异步准备
public class MainActivity extends AppCompatActivity {
private SeekBar seekBar;
private MediaPlayer mediaPlayer;
private ImageButton imageButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = (SeekBar) findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress=seekBar.getProgress();
//设置播放到的位置(从该位置继续播放)
mediaPlayer.seekTo(progress);
}
});
}
public void play(View view){
imageButton = (ImageButton) view;
if (mediaPlayer==null) {
mediaPlayer = new MediaPlayer();
//设置音频流的类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//建立应用内的音频
// mediaPlayer = MediaPlayer.create(this, R.raw.love);
//播放内存卡中的音乐
// try {
// mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3"));
// //缓存准备
// mediaPlayer.prepare();
// } catch (IOException e) {
// e.printStackTrace();
// }
//播放网络音乐
try {
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));
//异步准备
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
//开始
mediaPlayer.start();
//改变成播放的图标
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐播放时长
int duration=mediaPlayer.getDuration();
//给进度条设置最大值
seekBar.setMax(duration);
new Mythreath().start();
}
});
}else if(mediaPlayer.isPlaying()){//如果正在播放
mediaPlayer.pause();//停止播放
//改变图标
imageButton.setImageResource(android.R.drawable.ic_media_play);
}else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
class Mythreath extends Thread{
@Override
public void run() {
super.run();
while(seekBar.getProgress()<=seekBar.getMax()){
//得到音乐播放当前位置
int current=mediaPlayer.getCurrentPosition();
//设置当前进度
seekBar.setProgress(current);
}
}
}
}
<!-- 读取内存卡的权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 联网的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
四、音频池
实例化音频池new SoundPool(可同时播放的音频数,音频类型,0);
SoundPool.Load(this,应用内的音频,1);将音频加到音频池中,如果设置的音频数为5
,则加入第六个时,第一个加入的音频失效。
soundPool.setOnLoadCompleteListener(){};音频池中加入了新的音频后触发
soundPool.play();播放
public class SoundPoolActivity extends AppCompatActivity {
private SoundPool soundPool;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sound_pool);
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0);
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
soundPool.play(sampleId,1,1,1,-1,1);
}
});
}
public void playone(View view){
soundPool.load(this,R.raw.rooster,1);
}
public void playtwo(View view){
soundPool.load(this,R.raw.chimp,1);
}
public void playthree(View view){
soundPool.load(this,R.raw.crickets,1);
}
public void playfour(View view){
soundPool.load(this,R.raw.roar,1);
}
public void playfive(View view){
soundPool.load(this,R.raw.dogbark,1);
}
}
五、用VideoView视图播放,android自带的播放效果
public class VideoActivity extends AppCompatActivity {
private VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
videoView = (VideoView) findViewById(R.id.video);
//设置视频来源
videoView.setVideoPath("file://mnt/sdcard/Movies/advideo.mp4");
//实例化媒体控制器
MediaController mediaController=new MediaController(this);
mediaController.setMediaPlayer(videoView);
videoView.setMediaController(mediaController);
}
}
如果要做一个音乐播放器就不能这样做了,这个方法基本是只用于一个软件本身内部的音乐效果,比如一个游戏的声音特效的控制。