转载请注明出处(万分感谢!):
https://blog.csdn.net/weixin_40790006/article/details/79941385
package com.example.f405.mediatest;
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
import java.io.File;
import java.io.IOException;
import java.net.URI;
/* TODO 音频,资源文件,视频,其他文件
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button btn_start;
private Button btn_pause;
private Button btn_stop;
private MediaPlayer player;
private VideoView video;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
initView();
// 准备播放音乐
prepareMusic();
// 播放视频
prepareAudio();
}
// TODO 初始化控件
private void initView() {
btn_start = (Button) findViewById(R.id.btn_start);
btn_pause = (Button) findViewById(R.id.btn_pause);
btn_stop = (Button) findViewById(R.id.btn_stop);
video = (VideoView) findViewById(R.id.video);
btn_start.setOnClickListener(this);
btn_pause.setOnClickListener(this);
btn_stop.setOnClickListener(this);
}
// TODO 准备播放音乐
private void prepareMusic() {
// raw
initMusicWithRAW(R.raw.kakk);
// // uri
// initMusicWithURI();
// // net
// initMusicWithNet();
// sd,没实现??
// initMusicWithSD();
}
// 音频
// TODO raw
private void initMusicWithRAW(int resId) {
// 不需要prepare,create做了d
player = MediaPlayer.create(this,resId);
}
// TODO uri
private void initMusicWithURI(Uri uri) {
try {
Uri myUri = uri;
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(this,myUri);
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
// TODO net,url
private void initMusicWithNet(String url) {
try {
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(url);
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
// TODO sd,没实现??
private void initMusicWithSD() {
// sd 卡
// 判断权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
// 申请权限
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else {
// 从sd卡,读取文件,并播放
getSDResWithMusic();
}
}
private void getSDResWithMusic() {
try {
File file = new File(Environment.getExternalStorageDirectory(),"ka.mp3");
Log.d(TAG, "getSDResWithMusic:---- "+file.getPath());
player.setDataSource(file.getPath());
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
// 权限请求结果,sd卡
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
// music
case 1:
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
getSDResWithMusic();
}else {
Toast.makeText(this, "拒绝权限,无法访问", Toast.LENGTH_SHORT).show();
}
break;
// audio
case 2:
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
getSDResWithAudio();
}else {
Toast.makeText(this, "拒绝权限,无法访问", Toast.LENGTH_SHORT).show();
}
break;
}
}
// TODO 准备播放视频
private void prepareAudio() {
// sd
initAudioWithSD();
}
// TODO sd
private void initAudioWithSD() {
// 判断权限
if (ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
// 申请权限
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},2);
}else {
// 准备视频文件
getSDResWithAudio();
}
}
private void getSDResWithAudio() {
File file = new File(Environment.getExternalStorageDirectory(),"meipai.mp4");
Log.d(TAG, "getSDResWithAudio:---- "+file.getPath());
video.setVideoPath(file.getPath());
video.setMediaController(new MediaController(this));
}
// 点击事件
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_start:
player.start();
break;
case R.id.btn_pause:
player.pause();
break;
case R.id.btn_stop:
player.stop();
break;
}
}
}