简单音乐播放器

界面如图,采用service服务组建,实现后台播放。包括 播放,暂停,重播,停止功能

下面就让我们一起看看它的实现吧(上图路径中要有音频文件)。

1.界面布局就不介绍了

2.service代码

public class PlayerService extends Service {

     private MediaPlayer player;

     @Override
     public void onCreate() {
            super.onCreate();
           Log. i("" , "onCreate" );
     }

     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
           Log. i("" , "onStartCommand" );
            return super.onStartCommand(intent, flags, startId);
     }

     /**
      * 当activity绑定服务时执行此方法,返回IBinder实现(个人理解,相当于组件间的媒介)
      */
     @Override
     public IBinder onBind(Intent intent) {
           Log. i("" ,"onBind" );
            return new PlayerBinder();
     }

     /**
      * 之所以用implements Player,是因为如果PlayerBinder扩展对外的功能时,不会影响Player的调用,实现解耦
      */
     private class PlayerBinder extends Binder implements Player{

            @Override
            public boolean play(String path) {
                 boolean result = false;
                 try {
                      player = new MediaPlayer();
                      player.setAudioStreamType(AudioManager. STREAM_MUSIC);
                      player.setDataSource(path);
                      player.prepare();
                      player.start();
                     result = true;
                } catch (Exception e) {
                      //IllegalArgumentException, SecurityException, IllegalStateException, IOException(简化处理)
                      return false;
                }
                 return result;
           }

            //播放,暂停切换
            @Override
            public String switchState(String path) {
                String result = "";
                 if( player== null){
                      if(play(path)){
                           result = "暂停";
                     } else {
                           result = "播放";
                     }
                } else if( player.isPlaying()){
                      player.pause();
                     result = "播放";
                } else{
                      player.start();
                     result = "暂停";
                }
                 return result;
           }

            @Override
            public String replay() {
                String result = "";
                 if( player!= null){
                      player.seekTo(0);
                      player.start();
                     result = "暂停";
                }
                 return result;
           }

            @Override
            public String stop() {
                String result = "";
                 if( player!= null){
                      player.stop();
                      player.release();
                      player = null;
                     result = "播放";
                }
                 return result;
           }

            @Override
            public String getPlayerState() {
                String result = "";
                 if( player!= null&& player.isPlaying()){
                     result = "暂停";
                }
                 return result;
           }
     }

     @Override
     public void onDestroy() {
            super.onDestroy();
           Log. i("service" , "onDestory" );
     }
}

Interface文件

public interface Player {

      public boolean play(String path);
      public String switchState(String path);
      public String replay();
      public String stop();
      public String getPlayerState();

}

3.最后贴上activity代码

public class MainActivity extends Activity implements OnClickListener {

      private Player playerInter;
      private EditText etMainPath;
      private PlayerConnection conn = new PlayerConnection();
      private Button btMainPlayPause, btMainReplay, btMainStop;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           setContentView(R.layout. activity_main);
            etMainPath = (EditText) findViewById(R.id.et_main_path );
            btMainPlayPause = (Button) findViewById(R.id.bt_mian_play_pause );
            btMainReplay = (Button) findViewById(R.id.bt_mian_replay );
            btMainStop = (Button) findViewById(R.id.bt_mian_stop );

            btMainPlayPause.setOnClickListener( this);
            btMainReplay.setOnClickListener( this);
            btMainStop.setOnClickListener( this);

            //service只能被创建一次,当activity销毁后,再次创建activity不会重新创建service
           Intent startIntent = new Intent( this, PlayerService.class );
           startService(startIntent);

           Intent bindIntent = new Intent( this, PlayerService.class );
           bindService(bindIntent, conn, BIND_AUTO_CREATE);
     }

      private class PlayerConnection implements ServiceConnection {

            //当连接成功时执行此方法,获得播放器操作接口
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                 playerInter = (Player) service;
                String state = playerInter.getPlayerState();
                 if(!state.equals( "")){
                      btMainPlayPause.setText(state);
                }
           }

            @Override
            public void onServiceDisconnected(ComponentName name) {

           }

     }

      //每次结束时解绑
      @Override
      public void finish() {
            super.finish();
            // 每次结束activity时候,解绑服务连接
           unbindService( conn);
           Log. i("" , "disconnect" );
     }

      @Override
      public void onClick(View v) {
            switch (v.getId()) {
            case R.id. bt_mian_play_pause:
                String playState = playerInter.switchState( etMainPath.getText().toString().trim());
                 if(!playState.equals( "")){
                      btMainPlayPause.setText(playState);
                }
                 break;
            case R.id. bt_mian_replay:
                String replayState = playerInter.replay();
                 if(!replayState.equals( "")){
                      btMainPlayPause.setText(replayState);
                }
                 break;
            case R.id. bt_mian_stop:
                String stopState = playerInter.stop();
                 if(!stopState.equals( "")){
                      btMainPlayPause.setText(stopState);
                }
                 break;
            default:
                 break;
           }
     }

      @Override
      protected void onDestroy() {
            super.onDestroy();
           Log. i("activity" , "onDestory" );
     }

}
时间: 2024-10-11 02:59:28

简单音乐播放器的相关文章

Android 实现简单音乐播放器(一)

今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习之路上的一个小小里程碑,给我增加了很多信心(~~真容易获得满足~~).从下面开始,我将详细介绍MusicPlayer的设计过程. 首先,先看一下这个项目的工程目录和运行效果:      从上面的图片看到,整个工程的布局文件有两个:activity_main.xml和musiclist.xml,其中,

Android——简单音乐播放器

使用MediaPlayer做的简单音乐播放器,更多内容请到百度经验查看   http://jingyan.baidu.com/article/60ccbceb63452364cab197f1.html <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:l

Android开发---MediaPlayer简单音乐播放器

Android开发-MediaPlayer简单音乐播放器 功能介绍 实现一个简单的播放器,类似网易云音乐形式,功能包括: 播放.暂停,停止,退出功能: 后台播放功能: 进度条显示播放进度.拖动进度条改变进度功能: 播放时图片旋转,显示当前播放时间功能: 界面样式 功能实现 1. MediaPlayer的实现 MediaPlayer常用方法介绍 MediaPlayer的实现包括初始化MediaPlayer,MediaPlayer的功能实现,包括播放.暂停.停止.离开等,具体细节如下: MediaP

Android 实现简单音乐播放器(二)

在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我将解析MusicPlayer的功能实现,就讲一些主要的点和有趣的细节,结合MainActivity.java代码进行说明(写出来可能有点碎……一向不太会总结^·^). 一.功能菜单 在MusicPlayer中,我添加了三个菜单: search(搜索手机中的音乐文件,更新播放列表). clear(清除播放列表……这个功能是最初加进去的,后来改进之后,已经没什么实际意义). exit(退出). menu

iOS 简单音乐播放器 界面搭建

如图搭建一个音乐播放器界面,具备以下几个简单功能: 1,界面协调,整洁. 2,点击播放,控制进度条. 3.三收藏歌曲,点击收藏,心形收藏标志颜色加深. 4,左右按钮,切换歌曲图片和标题. 5,点击中间图片,隐藏所有按钮,仅显示蓝色背景. 设计的整体思路: 1.在搭建界面的时候,为了整洁和方便后续的功能的添加,需要将整个的界面划分为几个部分: ①:最上面的一行包括:一个返回按钮.一个歌曲名称.一个收藏按钮: ②:第二行:一个slider控件.两侧是当前的歌曲播放进度和歌曲的总时长--两个lable

Android开发6:Service的使用(简单音乐播放器的实现)

前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service 进行后台工作, 学会使用 Service 与 Activity 进行通信,并在此知识基础上学会使用 MediaPlayer和简单的多线程编程.使用 Handle 更新 UI,并设计成功一个简单的音乐播放器. 是不是很高大上呢~一起来学习~ 基础知识 Service作为Android四大组件之一,在每

Android开发实战之简单音乐播放器

最近开始学习音频相关.所以,很想自己做一个音乐播放器,于是,花了一天学习,将播放器的基本功能实现了出来.我觉得学习知识点还是蛮多的,所以写篇博客总结一下关于一个音乐播放器实现的逻辑.希望这篇博文对你的学习和生活有所帮助.效果图: **实现逻辑** 在市面上的音乐播放app,即时你关了.那么一样会在后台播放,所以播放的逻辑应该写在Service中.并且能够实现Service和Activity之间进行通信.那么Service是四大组件之一,所以在使用的时候一定不要忘了在配置文件中声明一下. <ser

C#简单音乐播放器ListBox歌单列表

简单的音乐播放器实现其实并不难,直接用axWindowsmediaplayer来做,这里没有什么技术含量的,但是axWindowsmediaplayer是不会生成歌单列表的,也就是说,在每次添加音乐后axWindowsmediaplayer是没有记录的,那么我就来简单的做下歌单列表. axWindowsmediaplayer的工作原理其实就是根据Path来加载的,在写歌单时我们需要先来做两件事,1.存储歌曲Path 2.存储歌曲名字 这里暂且不考虑数据库,我使用IO操作通过txt文件来存储这两种

Qt5 简单音乐播放器(进击版1)

今天又抽空改进了下音乐播放器的功能 主要改进代码: 播放列表:QListWidget 类 标准文件对话框:QFileDialog QString getfilename(QString filepath) {     QString filename;     QStringList list = filepath.split("/");     filename = list.at(list.size()-1);     return filename; } QString Main

第二十九节(java-开发简单音乐播放器 )

package com.tanzhou.jmf; import java.applet.*; import java.awt.*; import java.awt.event.*; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import javax.swing.*; // JFrame java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大