Android媒体开发之音乐播放器,android音乐播放器

6
回复
567
查看
[复制链接]

501

主题

1213

帖子

2059

安币

手工艺人

发表于 2018-3-7 10:51:45 | 显示全部楼层 |阅读模式

            

        本文实例为大家分享了android媒体开发之音乐播放器的具体代码,供大家参考,具体内容如下

        可以对音乐文件实现播放、暂停、重播和停止功能。退出应用和回到桌面时音乐停止。

        主界面:

        

20171227112401896.jpg

        主界面配置文件mian.xml:

[Java] 查看源文件 复制代码
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:id="@+id/container" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:orientation="vertical" 
  tools:context="com.example.musicplay.mainactivity" > 
  <textview 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/filename" /> 
  <edittext 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.00" 
    android:background="#b0c4de" 
    android:text="payphone.mp3" 
    android:id="@+id/filename" /> 
  <linearlayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
     > 
    <button 
      android:id="@+id/playbutton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onclick="mediaplay" 
      android:text="@string/playbutton" /> 
    <button 
      android:id="@+id/pausebutton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onclick="mediaplay" 
      android:text="@string/pausebutton" /> 
    <button 
      android:id="@+id/resetbutton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onclick="mediaplay" 
      android:text="@string/resetbutton" /> 
    <button 
      android:id="@+id/stopbutton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onclick="mediaplay" 
      android:text="@string/stopbutton" /> 
  </linearlayout> 
</linearlayout> 

        主界面的activity

        mainactivity.java:

[Java] 查看源文件 复制代码
package com.example.musicplay; 
import java.io.file; 
import android.app.activity; 
import android.content.context; 
import android.media.mediaplayer; 
import android.media.mediaplayer.onpreparedlistener; 
import android.os.bundle; 
import android.os.environment; 
import android.telephony.phonestatelistener; 
import android.telephony.telephonymanager; 
import android.view.view; 
import android.widget.button; 
import android.widget.edittext; 
import android.widget.toast; 
public class mainactivity extends activity { 
 private edittext nametext; 
 private string path; 
 private int position; 
 private mediaplayer mediaplayer; 
 private boolean pause; 
 protected void oncreate(bundle savedinstancestate) { 
 super.oncreate(savedinstancestate); 
 setcontentview(r.layout.activity_main); 
 nametext=(edittext) this.findviewbyid(r.id.filename); 
 mediaplayer=new mediaplayer(); 
 
 } 
  
 //以下方法会造成只要应用在后台音乐都会停止播放 
 @override 
 //当应用不在前台时,停止播放 
 protected void onpause() { 
 if(mediaplayer.isplaying()){ 
  position=mediaplayer.getcurrentposition(); 
  mediaplayer.stop(); 
 } 
 super.onpause(); 
 } 
  
 @override 
 protected void onresume() { 
 if(position>0&&path!=null){ 
  play(); 
  mediaplayer.seekto(position); 
  position=0; 
 } 
 super.onresume(); 
 } 
 @override 
 protected void ondestroy() { 
 mediaplayer.release(); 
 mediaplayer=null; 
 super.ondestroy(); 
 } 
 public void mediaplay(view v){ 
 switch (v.getid()) { 
 case r.id.playbutton: 
  string filename=nametext.gettext().tostring(); 
  //environment.getexternalstoragedirectory()检查外部存储设备的可用性 
  file audio=new file(environment.getexternalstoragedirectory(),filename); 
  if(audio.exists()){ 
  //获取sdcard目录,2.2的时候为:/mnt/sdcart 2.1的时候为:/sdcard,所以使用静态方法得到路径会好一点。   
  path=audio.getabsolutepath(); 
  play(); 
  } 
  else{ 
  path=null; 
  toast.maketext(getapplicationcontext(), r.string.error, 1).show(); 
  } 
  break; 
   
 case r.id.pausebutton: 
  if(mediaplayer.isplaying()){ 
  mediaplayer.pause(); 
  pause=true; 
  ((button)v).settext(r.string.continues); 
  }else{ 
  if(pause){ 
   mediaplayer.start(); 
   pause=false; 
   ((button)v).settext(r.string.pausebutton); 
  } 
  } 
  break; 
   
 case r.id.resetbutton: 
  if(mediaplayer.isplaying()){ 
  mediaplayer.seekto(0);//从开始位置播放 
  }else{ 
  if(path!=null){ 
   play(); 
  } 
  } 
  break; 
   
 case r.id.stopbutton: 
  if(mediaplayer.isplaying()){ 
  mediaplayer.stop(); 
  } 
  break; 
   
 default: 
  break; 
 } 
 } 
 private void play() { 
 try { 
  mediaplayer.reset();//把各项参数恢复到初始化状态 
  mediaplayer.setdatasource(path); 
  mediaplayer.prepare();//进行缓冲 
  //设置缓冲监听器 
  mediaplayer.setonpreparedlistener(new onpreparedlistener() { 
   
  //缓冲完毕后调用onprepared方法 
  public void onprepared(mediaplayer mp) { 
   // 里面写缓冲完要干的事 
   mediaplayer.start(); 
  } 
  }); 
 } catch (exception e) { 
  e.printstacktrace(); 
 } 
 } 
} 

        实现了简单的sd卡中音乐的播放。



        

465

主题

9956

帖子

809

安币

代码手工艺人

Rank: 4

发表于 2018-3-7 19:57:13 | 显示全部楼层
支持,感谢,祝巴士越来越好~

0

主题

9517

帖子

2470

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-8 13:25:11 | 显示全部楼层
感谢大神~

449

主题

1205

帖子

1962

安币

手工艺人

发表于 2018-3-9 09:03:16 | 显示全部楼层
支持楼主,支持安卓巴士!

1

主题

9250

帖子

2910

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-10 04:21:23 | 显示全部楼层
支持楼主,支持安卓巴士!

85

主题

9842

帖子

2201

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-10 21:05:24 | 显示全部楼层
感谢大神~

3

主题

9484

帖子

1796

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2018-3-11 11:49:10 | 显示全部楼层
帮帮顶顶!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )