MP3音乐播放器

来源:互联网 发布:c语言 自定义函数 编辑:程序博客网 时间:2024/05/01 21:23

        最近在做一个音乐播放器,用到的东西太多,先做一个小结,说一下我在这个音乐播放器中所使用到的一些东西,希望对大家有一定参考作用,具体实现下次再分块具体说明

一.MediaPlayer

        要播放音乐首先当然少不了MediaPalyer,下面介绍一下MediaPlayer的一些常用操作:

        1)如何获得MediaPlayer实例:

              可以使用直接new的方式:

              MediaPlayer mp = new MediaPlayer();//要调用setDataSource

              也可以使用create的方式,如:

              MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了

 

         2) 如何设置要播放的文件:

              下面是我在Googel API里拷的,我目前只用到了第一个中的fie-path
voidsetDataSource(String path)

Sets the data source (file-path or http/rtsp URL) to use.
voidsetDataSource(FileDescriptor fd, long offset, long length)
Sets the data source (FileDescriptor) to use.
voidsetDataSource(FileDescriptor fd)
Sets the data source (FileDescriptor) to use.
voidsetDataSource(Context context,Uri uri,Map<String, String> headers)
Sets the data source as a content Uri.
voidsetDataSource(Context context,Uri uri)
Sets the data source as a content Uri.
              MediaPlayer要播放的文件可以包含在:

                     a. 应用中事先自带的resource资源

                          例如:MediaPlayer.create(this, R.raw.test);

                     根据第一个setDataSource(String path)不难看出还可以是

                     b. 存储在SD卡或其他文件路径下的媒体文件

                         例如:mp.setDataSource("/sdcard/Music/myohmy.mp3");

                     c. 网络上的媒体文件

                         例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");

        3)对播放器的主要控制方法:

               Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:

                       prepare()和prepareAsync()  提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,

               那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过  了。

               start()是真正启动文件播放的方法,

               pause()和stop()比较简单,起到暂停和停止播放的作用。

         4)设置播放器的监听器:

                MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,

                 如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、

                          setOnErrorListener(MediaPlayer.OnErrorListener listener)等,

                          设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性。

                  下面附一张Google提供的Mediaplayer的状态图:


二.Service

          能够播放音乐了,接下来我们要实现的就是后台播放,而使用Service正可以实现这一功能。

          Android中的服务,它与Activity不同,它是不能与用户交互的(没有界面),不能自己启动的(需要某个Activity或者其他Context对像调用),并且是运行在后台的程序,

         在我们退出应用后,Service进程可以继续在后台运行而不影响其我 们使用他应用;

          下面我们来看一下Service的常用操作:

          1)启动Service
                   Android中已经定义了一个 ‘Service’类,所有其他的Service都继承于该类。Service类中定义了一系列的生命周期相关的方法,如: onCreate(), onStart(), onDestroy()。

                   在我的程序里,我主要是用startService来启动服务,这样在Activity中我们可以像调用Activity一样使用Intent调用Service:

                   Intent serviceIntent = new Intent( this, ServiceName.class);//this为Activity的Context,ServiceName为继承了Service的一个类

                   不过使用的是startService( serviceIntent );

                   当第一次启动Service时,会调用Service中的onCreate()方法,而且无论后面调用多少次startService,onCreate()方法只会在第一次创建Service时调用一次;

                   由于使用startService(serviceIntent),所以在onCreate()后还会调用onStart()方法,而且每次使用startService时都会调用onStart();

                   下面提供一个判断Service是否在运行的小方法:

                    public boolean isServiceRunning(String ServiceName)
                     {
                                   ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
                                   for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
                                    {
                                                 if (ServiceName.equals(service.service.getClassName()))
                                                 {
                                                          return true;
                                                  }
                                     }
                                     return false;
                     }

                     其中参数ServiceName形式如:"com.bill.musicplayer.MusicService";

         2)停止Service

                    后台操作完成后,使用stopService(serviceIntent)停止Service,无论Service被启动了几次,stopService都能停止Service;

         最后要注意的是Service和Activity一样也要AndroidManifest.xml中进行配置,如下:

        <service
            android:enabled="true"
            android:name=".MusicService">
        </service>

三.AppWidget

        使用Service实现后台播放音乐的功能后,为了使用户更方便的对音乐播放进行控制,我有给程序增加了一个AppWidget;

        应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新,

        并且Widget可以响应一些基本的按钮点击事件,这就使得我们可以直接通过桌面上的Widget来控制后台的Service,而不必再进入应用程序。


今天实在太晚了,而且Widget部分一时半会也讲不完,所以就到这吧,以后再将Service和Widget专门说一下,并给出完整播放器。

       

原创粉丝点击