android音乐播放简单实现的简单示例(MediaPlayer)
程序员文章站
2023-12-05 15:54:28
利用mediaplayer完成一个最简单的音乐播放。这个基本的控制掌握后,可直接利用为背景乐的控制。
为了能够实现播放,在界面方面,我们需要三个控制按钮,分别是:pl...
利用mediaplayer完成一个最简单的音乐播放。这个基本的控制掌握后,可直接利用为背景乐的控制。
为了能够实现播放,在界面方面,我们需要三个控制按钮,分别是:play(播放)、pause(暂停)、stop(停止)
请看activity_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:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.cofox.myaudio.mainactivity"> <button android:id="@+id/btnplay" android:layout_width="match_parent" android:layout_height="wrap_content" android:textallcaps="false" android:text="play"/> <button android:id="@+id/btnpause" android:layout_width="match_parent" android:layout_height="wrap_content" android:textallcaps="false" android:text="pause"/> <button android:id="@+id/btnstop" android:layout_width="match_parent" android:layout_height="wrap_content" android:textallcaps="false" android:text="stop"/> </linearlayout>
在mainactivity.java首先声明一个 mediaplayer 播放器。
private mediaplayer mediaplayer = new mediaplayer();
由于音乐播放也是需要专门的权限的,所以在 oncreate 中动态申请权限,然后才初始化播放器。
//权限判断,如果没有权限就请求权限 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.setlooping(true);//设置为循环播放 mediaplayer.prepare();//初始化播放器mediaplayer } catch (exception e) { e.printstacktrace(); } }
在 oncreate中需要实例化三个按钮
button btnplay = (button) findviewbyid(r.id.btnplay); button btnpause = (button) findviewbyid(r.id.btnpause); button btnstop = (button) findviewbyid(r.id.btnstop); btnplay.setonclicklistener(this); btnpause.setonclicklistener(this); btnstop.setonclicklistener(this);
btnplay.setonclicklistener(this) 这种写法,需要类的扩展支持。所以,mainactivity 增加了 implements view.onclicklistener
复制代码 代码如下:
public class mainactivity extends appcompatactivity implements view.onclicklistener {
获取权限的部分,需要用户操作,根据权限的给予情况,软件要做出不同的反应。获得了权限,就去初始化;没获得权限,就去通知用户。
@override public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) { switch (requestcode){ case 1: if(grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted){ initmediaplayer(); }else{ toast.maketext(this, "拒绝权限,将无法使用程序。", toast.length_long).show(); finish(); } break; default: } }
统一在一个 onclick 方法内处理界面所有按钮的点击事件。
@override public void onclick(view v) { switch (v.getid()){ case r.id.btnplay: //如果没在播放中,立刻开始播放。 if(!mediaplayer.isplaying()){ mediaplayer.start(); } break; case r.id.btnpause: //如果在播放中,立刻暂停。 if(mediaplayer.isplaying()){ mediaplayer.pause(); } break; case r.id.btnstop: //如果在播放中,立刻停止。 if(mediaplayer.isplaying()){ mediaplayer.reset(); initmediaplayer();//初始化播放器 mediaplayer } break; default: break; } }
注意 case r.id.btnstop 中,mediaplayer.reset() 后,我们重新对播放器进行了初始化。如果没有这条语句,实测的效果是点击了停止按钮后,再点击开始按钮是无法顺利播放音乐的。感兴趣的朋友可以实验一下。
ondestroy() 的逻辑很容易理解,就是彻底清理音乐播放占用的资源了。
@override protected void ondestroy() { super.ondestroy(); if(mediaplayer != null){ mediaplayer.stop(); mediaplayer.release(); } }
完整代码示例:
package com.cofox.myaudio; import android.manifest; import android.content.pm.packagemanager; import android.media.mediaplayer; 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.view.view; import android.widget.button; import android.widget.toast; import java.io.file; public class mainactivity extends appcompatactivity implements view.onclicklistener { private mediaplayer mediaplayer = new mediaplayer(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); button btnplay = (button) findviewbyid(r.id.btnplay); button btnpause = (button) findviewbyid(r.id.btnpause); button btnstop = (button) findviewbyid(r.id.btnstop); btnplay.setonclicklistener(this); btnpause.setonclicklistener(this); btnstop.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 } } private void initmediaplayer() { try { file file = new file(environment.getexternalstoragedirectory(), "music.mp3"); mediaplayer.setdatasource(file.getpath());//指定音频文件路径 mediaplayer.setlooping(true);//设置为循环播放 mediaplayer.prepare();//初始化播放器mediaplayer } catch (exception e) { e.printstacktrace(); } } @override public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) { switch (requestcode){ case 1: if(grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted){ initmediaplayer(); }else{ toast.maketext(this, "拒绝权限,将无法使用程序。", toast.length_long).show(); finish(); } break; default: } } @override public void onclick(view v) { switch (v.getid()){ case r.id.btnplay: //如果没在播放中,立刻开始播放。 if(!mediaplayer.isplaying()){ mediaplayer.start(); } break; case r.id.btnpause: //如果在播放中,立刻暂停。 if(mediaplayer.isplaying()){ mediaplayer.pause(); } break; case r.id.btnstop: //如果在播放中,立刻停止。 if(mediaplayer.isplaying()){ mediaplayer.reset(); initmediaplayer();//初始化播放器 mediaplayer } break; default: break; } } @override protected void ondestroy() { super.ondestroy(); if(mediaplayer != null){ mediaplayer.stop(); mediaplayer.release(); } } }
当然,你不能忘记了在 androidmanifest.xml 添加权限声明。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cofox.myaudio"> <uses-permission android:name="android.permission.write_external_storage"/> ...
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。