前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android-MediaPlayer

Android-MediaPlayer

作者头像
晨曦_LLW
发布2020-09-25 11:23:19
6460
发布2020-09-25 11:23:19
举报

MediaPlayer

突然觉得这个音乐播放有点意思,我们来做一下吧。 首先我们来一个名为MediaPlayerDemo的项目。 然后再main.xml文件里面创建三个按钮,分别是播放、暂停、停止,代码如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <Button
        android:id="@+id/play"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Play"/>
    <Button
        android:id="@+id/pause"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Pause"/>
    <Button
        android:id="@+id/stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Stop"/>
</LinearLayout>

然后我们进入MainActivity活动页面,代码如下:

代码语言:javascript
复制
package com.example.mediaplayerdemo;

import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;

//继承View.OnClickListener,是按钮放在一起更直观,用另一种方法来设置按钮点击监听
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    //定义三个按钮并实例化MediaPlayer
    private MediaPlayer mediaPlayer = new MediaPlayer();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button play = (Button)findViewById(R.id.play);
        Button pause = (Button)findViewById(R.id.pause);
        Button stop = (Button)findViewById(R.id.stop);
        play.setOnClickListener(this);
        pause.setOnClickListener(this);
        stop.setOnClickListener(this);
        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
        }
    }
    /*
    * 初始化MediaPlayer
    * */
    private void initMediaPlayer(){
        try {
            File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
            mediaPlayer.setDataSource(file.getPath());//指定音频文件的路径
            mediaPlayer.prepare();//让MediaPlayer进入到准备状态
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public void onRequestPermissionResult(int requestCode,String[] permissions,int[] grantResults){
         switch (requestCode){
             case 1:
                 if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                     initMediaPlayer();
                 }else {
                     Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
                     finish();
                 }
                 break;
             default:
         }
    }

    @Override
    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的实例,然后在onCreate()方法中进行了运行时权限处理,动态申请WRITE_EXTERNAL_STORAGE权限,因为我们的音乐文件是放在手机SD卡里面,所以需要这个权限来访问SD卡。在AndroidManifest.xml中添加这个权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在onRequestPermissionResult()(你可以把这个方法理解为请求权限结果)方法中,如果你拒绝了这个权限申请,那么就会调用finish方法将程序直接关掉。 用户同意授权之后就会调用initMediaPlayer()方法为MediaPlayer对象进行初始化操作,在initMediaPlayer()方法中,首先是通过创建一个File(文件)对象来指定音频文件的路径,所以我们需要在SD卡的根目录下面放置一个名为music.mp3的音频文件。后面调用setDataSource()和prepare()方法为MediaPlayer做好播放准备。 下面的点击事件中我们对每个按钮进行判断,当点击Play按钮时会进行判断,如果当前MediaPlayer没有正在播放的音频就调用start()方法开始播放。当点击Pause按钮时会进行判断,如果当前MediaPlayer正在播放音频就调用pause()方法暂停播放。当点击Stop按钮时会进行判断,如果当前MediaPlayer正在播放音频就调用reset()方法将MediaPlayer重置为刚刚创建时的状态,然后重新调用一遍initMediaPlayer()方法。 最后在onDestroy()方法中,我们分别调用stop()方法和release()方法,将MediaPlayer相关的资源释放掉。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MediaPlayer
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档