音乐播放器播放来源有3种
- 内存中播放(raw文件下)
- sd卡播放
- 网络播放
因为播放器截图看不到效果,所有就不发图了 具体如何实现如下
布局文件 布局就是SeeBar ImageButton
<?xml version="1.0" encoding="utf-8"?>
<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="horizontal"
tools:context="com.example.playmusic.MainActivity">
<SeekBar
android:layout_marginTop="20dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:id="@+id/sb_main_kk"
/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:onClick="isPlayorPues"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<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="horizontal"
tools:context="com.example.playmusic.MainActivity">
<SeekBar
android:layout_marginTop="20dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:id="@+id/sb_main_kk"
/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:onClick="isPlayorPues"
/>
</LinearLayout>
一:内存中播放(raw文件下) 没有什么可说的 就是它里面有播放,暂停,停止,等等的方法直接调用
//raw内存里播放音
mediaPlayer = MediaPlayer.create(this, R.raw.qq);
二:sd卡播放 因为sd卡比内存中读取速率慢 所以不能直接获取资源
- new 一个MediaPlayer
- 设置播放类型(setAudioStreamType(AudioManager.STREAM_MUSTC这是一个音乐的类型))
- 设置音源(setDataSource(上下文,URI地址 协议(file)))
- 准备(prepare())
//sdcard里播放音乐
mediaPlayer=new MediaPlayer();
//设置播放类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
//设置音源
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/music/yy.mp3"));
//准备
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
再清单文件添加读取sd卡的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
三:网络播放 这跟sd卡播放差不多 但是就是设置音源,准备,监听是否缓存好
- new 一个MediaPlayer
- 设置播放类型(setAudioStreamType(AudioManager.STREAM_MUSTC这是一个音乐的类型))
- 设置音源(setDataSource(上下文,URI地址 协议(http)))
- 异步准备(prepareAsync())
- 监听(setOnPreparedListener())
//网络播放
mediaPlayer=new MediaPlayer();
//设置播放类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
//设置音源
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.120.101/yy.mp3"));
//异步准备
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
//监听
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
//播放
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
//得到音乐的总时长
int duration=mediaPlayer.getDuration();
//设置SeeBar的最大值
sb_main_kk.setMax(duration);
//线程
new MyRun().start();
}
});
再清单文件添加访问网络的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
java文件
package com.example.playmusic; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import java.io.IOException; public class MainActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private SeekBar sb_main_kk; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //SeeBar控件 sb_main_kk = (SeekBar) findViewById(R.id.sb_main_kk); //SeeBar设置拉动 sb_main_kk.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); } }); } public void isPlayorPues(View view){ final ImageButton imageButton= (ImageButton) view; if (mediaPlayer ==null){ //raw内存里播放音乐 //mediaPlayer = MediaPlayer.create(this, R.raw.qq); //sdcard里播放音乐 //mediaPlayer=new MediaPlayer(); //设置播放类型 //mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //try { //设置音源 // mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/music/yy.mp3")); //准备 //mediaPlayer.prepare(); //} catch (IOException e) { // e.printStackTrace(); //} //播放 //mediaPlayer.start(); //imageButton.setImageResource(android.R.drawable.ic_media_pause); //得到音乐的总时长 //int duration=mediaPlayer.getDuration(); //设置SeeBar的最大值 //sb_main_kk.setMax(duration); //线程 //new MyRun().start(); //网络播放 mediaPlayer=new MediaPlayer(); //设置播放类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { //设置音源 mediaPlayer.setDataSource(this, Uri.parse("http://192.168.120.101/yy.mp3")); //异步准备 mediaPlayer.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } //监听 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { //播放 mediaPlayer.start(); imageButton.setImageResource(android.R.drawable.ic_media_pause); //得到音乐的总时长 int duration=mediaPlayer.getDuration(); //设置SeeBar的最大值 sb_main_kk.setMax(duration); //线程 new MyRun().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 MyRun extends Thread{ @Override public void run() { super.run(); //根据SeeBar的当前位置和SeeBar最大值 while (sb_main_kk.getProgress()<=sb_main_kk.getMax()){ //获取音乐的当前位置 int currentposition=mediaPlayer.getCurrentPosition(); sb_main_kk.setProgress(currentposition); } } } }
清单文件添加权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission>
简易音乐播放器就是这样了,其实播放器不是很难。都是要知道一些方法用法。