多媒体是我们日常生活中接触的很频繁的东西,所以想和大家一起交流交流多媒体
关于音频播放,我所熟知的就是MediaPlayer,那么我们就用MediaPlayer做一个简易版的音乐播放器把
在这里我给大家分享分享三种音频播放的方式:
一、播放应用内的音频文件
二、播放内存里的音频文件
三、播放网络里的音频文件
详解请见下图以及以下代码:
首先我们来写Demo的样式排版,只需要一个seekbar和一个播放按钮就好了
main.xml
<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
tools:context="com.zking.android_26_mediaplay.MainActivity">
<SeekBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/seekBar"
android:layout_weight="1"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:onClick="isPlayOrPause"
/>
</LinearLayout>
Demo样式如下:
现在我们来写activity里的代码:
package com.zking.android_26_mediaplay;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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 seekBar;
@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 isPlayOrPause(View view) throws IOException {
final ImageButton imageButton= (ImageButton) view;
if(mediaPlayer==null){
//播放应用内的音频文件
//mediaPlayer = MediaPlayer.create(this, R.raw.q1);
//播放内存卡里的音频文件
mediaPlayer=new MediaPlayer();
//设置音频流的类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置音源
//播放内存卡里的音频文件
// mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/a4.mp3"));
//播放网络音乐
mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.134:8080/a3.mp3"));
//准备一下(内存卡)
mediaPlayer.prepare();
//网络准备需要异步准备
mediaPlayer.prepareAsync();
//设置准备完成的监听
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 MyThread().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 MyThread extends Thread{
@Override
public void run() {
super.run();
while(seekBar.getProgress()<=seekBar.getMax()){
//获取音乐的当前播放位置
int currentPosition=mediaPlayer.getCurrentPosition();
seekBar.setProgress(currentPosition);
}
}
}
}
音频播放说完了,我们再来说说视频吧
最上面的详解图中也有说到,视频播放我们也有两种方式:
一、SurfaceView+MediaPlayer
XML:
<?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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.zking.android_26_mediaplay.MainActivity">
<SurfaceView
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/sv_main_surface"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<SeekBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/seekBar"
android:layout_weight="1"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:onClick="isPlayOrPause"
/>
</LinearLayout>
</LinearLayout>
activity:只需将路径改掉,然后将对滚动条的监听关闭即可
//播放内存卡里的音频文件(视频)
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));
二、,VideoView
XML:
<?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_play_video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="horizontal"
tools:context="com.zking.android_26_mediaplay.PlayVideoActivity">
<VideoView
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/vv_video"
/>
</LinearLayout>
activity:
package com.zking.android_26_mediaplay;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
public class PlayVideoActivity extends AppCompatActivity {
private VideoView vv_video;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
vv_video = (VideoView) findViewById(R.id.vv_video);
//设置视频的来源
vv_video.setVideoPath("file://mnt/sdcard/Movies/advideo.mp4");
//实例化媒体控制器
MediaController mediaController=new MediaController(this);
//互相配置
mediaController.setMediaPlayer(vv_video);
vv_video.setMediaController(mediaController);
}
}
最后,别忘记加权限了
<!-- 读取内存卡的权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 联网的权限 -->
<uses-permission android:name="android.permission.INTERNET" />