一.首先模仿的是一个简单的音乐播放器。音乐播放器分三种情况
1.播放项目内本有的音乐
2.播放手机内存卡中的音乐(需要得到播放音乐的绝对路径)
3.播放网络路径的音乐
下面是具体代码
public class MainActivity extends AppCompatActivity {
private SeekBar seekbar;
private ImageButton play_pause_btn;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initview();
}
//初始化控件
private void initview(){
seekbar = (SeekBar) findViewById(R.id.Seekbar);
play_pause_btn = (ImageButton) findViewById(R.id.play_pause_btn);
//seekbar拖动
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//拖动停止处
int progress=seekbar.getProgress();
//跳转位置播放
mediaPlayer.seekTo(progress);
}
});
//开始播放 或 暂停
play_pause_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//判断 mediaPlayer 是不是第一次点击播放
if(mediaPlayer==null){
//一.读取项目内 音乐
// mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.a);
// //设置类型
// mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//二.读取内存卡中的音乐
// mediaPlayer = new MediaPlayer();
//
// //设置类型
// mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//
// //设置音源
// try{
// mediaPlayer.setDataSource(MainActivity.this, Uri.parse("file://mnt/sdcard/Music/Sugar.mp3"));
//
// //准备一下
// mediaPlayer.prepare();
//
// }catch (Exception e){
// e.printStackTrace();
// }
//三.读取网络音乐
mediaPlayer=new MediaPlayer();
//设置类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置音源
try{
//播放网络音乐
mediaPlayer.setDataSource(MainActivity.this, Uri.parse("http://192.168.56.169/Sugar.mp3"));
//异步准备一下
mediaPlayer.prepareAsync();
}catch (Exception e){
e.printStackTrace();
}
//准备完成的监听
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
//修改图标
play_pause_btn.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐总时长
int duration=mediaPlayer.getDuration();
//设置seekbar
seekbar.setMax(duration);
new MyThread().start();
}
});
}else if(mediaPlayer.isPlaying()){
//暂停
mediaPlayer.pause();
//修改图标
play_pause_btn.setImageResource(android.R.drawable.ic_media_play);
}else{
//播放
mediaPlayer.start();
//修改图标
play_pause_btn.setImageResource(android.R.drawable.ic_media_pause);
}
}
});
}
//使seekbar 动起来的线程
class MyThread extends Thread{
@Override
public void run() {
super.run();
//获取当前歌曲的时间
int currentposition=mediaPlayer.getCurrentPosition();
//给seekbar设置值
seekbar.setProgress(currentposition);
}
}
//销毁程序时 清空mediaPlayer
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.release();
}
}
以及xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android_26_musicplayer.MainActivity">
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Seekbar"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:id="@+id/play_pause_btn"
/>
</LinearLayout>
</LinearLayout>
二.实现的是一个Soudpool池实现多种声音一起播放的效果
public class SandPollActivity extends AppCompatActivity {
private SoundPool soundPool;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sand_poll);
//初始化控件
initview();
}
//初始化控件
private void initview(){
//实例化 音频池
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0);
//soundPool 加载完成监听
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int i, int i1) {
//播放
soundPool.play(i,1,1,1,-1,1);
}
});
//加载声音
findViewById(R.id.music1_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
soundPool.load(SandPollActivity.this,R.raw.chimp,1);
}
});
findViewById(R.id.music2_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
soundPool.load(SandPollActivity.this,R.raw.crickets,1);
}
});
findViewById(R.id.music3_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
soundPool.load(SandPollActivity.this,R.raw.dogbark,1);
}
});
findViewById(R.id.music4_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
soundPool.load(SandPollActivity.this,R.raw.love,1);
}
});
findViewById(R.id.music5_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
soundPool.load(SandPollActivity.this,R.raw.roar,1);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if(soundPool!=null){
soundPool.release();
soundPool=null;
}
}
}
以及xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_sand_poll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android_26_musicplayer.SandPollActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="声音1"
android:id="@+id/music1_btn"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="声音2"
android:id="@+id/music2_btn"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="声音3"
android:id="@+id/music3_btn"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="声音4"
android:id="@+id/music4_btn"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="声音5"
android:id="@+id/music5_btn"
/>
</LinearLayout>