Android多媒體應(yīng)用 二
音頻和視頻播放
音頻播放
步驟:
- 創(chuàng)建MediaPlayer
- 綁定監(jiān)聽(tīng)
- 運(yùn)行時(shí)權(quán)限處理
- 完善
onClick()
- 重寫(xiě)
onDestory()
花沉,釋放MediaPlayer
代碼
//布局就是4個(gè)按鈕
public class MainActivity extends AppCompatActivity {
MediaPlayer mediaPlayer = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ButterKnife綁定
ButterKnife.bind(this);
//運(yùn)行時(shí)權(quán)限
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else{
initMediaPlayer();//初始化MediaPlayer
}
}
private void initMediaPlayer() {
try {
File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
mediaPlayer.setDataSource(file.getPath());//指定音頻路徑
mediaPlayer.prepare();//讓MediaPlayer進(jìn)入準(zhǔn)備階段
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1:
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED){
initMediaPlayer();
}else{
Toast.makeText(this,"拒絕權(quán)限將無(wú)法使用程序",Toast.LENGTH_SHORT).show();
finish();
}
break;
}
}
@OnClick({R.id.play,R.id.pause,R.id.stop,R.id.jump})
public void onClick(View v){
switch (v.getId()){
case R.id.play:
if (!mediaPlayer.isPlaying()){
mediaPlayer.start();
}
break;
case R.id.pause:
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
break;
case R.id.stop:
if (mediaPlayer.isPlaying()){
mediaPlayer.reset();
initMediaPlayer();
}
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null){
mediaPlayer.stop();
mediaPlayer.release();//釋放掉與MediaPlayer是否正在播放音頻
}
}
}
MediaPlayer常用方法:
方法名 | 功能描述 |
---|---|
setData() |
設(shè)置要播放的音頻的位置 |
prepare() |
在開(kāi)始播放前調(diào)用此方法完成準(zhǔn)備工作 |
start() |
開(kāi)始或繼續(xù)播放音頻 |
pause() |
暫停播放音頻 |
reset() |
將MediaPlayer對(duì)象重置到剛剛創(chuàng)建時(shí)的狀態(tài) |
seekTo() |
從指定的位置開(kāi)始播放音頻 |
stop() |
停止播放谭企。調(diào)用這個(gè)方法后的MediaPlayer對(duì)象無(wú)法再播放音頻 |
release() |
釋放掉與MediaPlayer對(duì)象相關(guān)的資源 |
isplaying() |
判斷當(dāng)前MediaPlayer是否正在播放音頻 |
getDuration() |
獲取載入的音頻文件的時(shí)長(zhǎng) |
注意:
我們還要在AndroidMainfest文件中添加上權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
視頻播放
步驟:
- 獲取VideoView
- 綁定監(jiān)聽(tīng)
- 運(yùn)行權(quán)限處理
- 完善
onClick()
- 重寫(xiě)
onDestory()
棚饵,釋放VideoView
代碼:
//布局是三個(gè)button加一個(gè)VideoView
public class VideoActivity extends AppCompatActivity {
@BindView(R.id.video_view)
VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
ButterKnife.bind(this);
//運(yùn)行和權(quán)限處理
if (ContextCompat.checkSelfPermission(VideoActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(VideoActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else{
initVideoPath();
}
}
private void initVideoPath() {
File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4");
//初始化VideoView
videoView.setVideoPath(file.getPath());
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
initVideoPath();
}else{
Toast.makeText(this,"拒絕權(quán)限將無(wú)法使用程序",Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
break;
}
}
@OnClick({R.id.play_video,R.id.pause_video,R.id.replay_video})
public void onClick(View v){
switch (v.getId()){
case R.id.play_video:
if (!videoView.isPlaying()){
videoView.start();
}
break;
case R.id.pause_video:
if (videoView.isPlaying()){
videoView.pause();
}
break;
case R.id.replay_video:
if (videoView.isPlaying()){
videoView.resume();
}
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (videoView != null){
videoView.suspend();//釋放資源
}
}
}
VideoView常用方法:
方法名 | 功能描述 |
---|---|
setVideoPath() |
設(shè)置要播放的視頻文件的位置 |
start() |
開(kāi)始或繼續(xù)播放視頻 |
pause() |
暫停播放視頻 |
resume() |
將視頻重頭開(kāi)始播放 |
seekTo() |
從指定的位置開(kāi)始播放視頻 |
isPlaying() |
判斷當(dāng)前是否正在播放視頻 |
getDuration() |
獲取載入的視頻文件的時(shí)長(zhǎng) |
suspend() |
釋放資源 |
注意:
兩個(gè)示例代碼都需要在手機(jī)的根目錄下預(yù)先放好一個(gè)音頻和視頻。
示例來(lái)源于《Android第一行代碼》摹闽,邊讀邊敲懈玻,益于學(xué)習(xí)二庵。