Android中实现播放背景音乐功能
文章目录实现思路准备音乐文件创建一个`IntentService`在`MainActivity`中启动服务`Demo`体验Alittlebitofprogresseveryday!Comeon!实现思路在主活动中起一个服务,在服务中做播放背景音乐的操作。这里的服务可以是一般的Service,也可以是更加好用的IntentService。至于这两者的区别,不是本文的重点,大家可以自行查阅相关资料。我这里选择使用IntentService来实现功能。
准备音乐文件这里我们把音乐资源文件放到res资源文件夹下的raw文件夹内,一开始没有raw文件夹,新建raw文件夹如下图:创建好后,能看到raw文件夹了,我们往里面粘贴已经拷贝了的音乐文件,如图:
后面我们可以使用这个音乐资源文件了。
创建一个IntentService对于新建一个android项目我这里也不多讲。在新建好的项目对应代码所在包,点击右键New>Service>IntentService,如下图示:
最后点击Finish,会自己创建一个MyIntentService.java类,如图:MyIntentService.java类中的代码如下:
packagecom.example.zouqi.bgmusicdemo;importandroid.app.IntentService;importandroid.content.Intent;importandroid.media.MediaPlayer;importandroid.util.Log;/***An{@linkIntentService}subclassforhandlingasynchronoustaskrequestsin*aserviceonaseparatehandlerthread.**TODO:Customizeclass-updateintentactionsandextraparameters.*/publicclassMyIntentServiceextendsIntentService{//TODO:Renameactions,chooseactionnamesthatdescribetasksthatthis//IntentServicecanperform,e.g.ACTION_FETCH_NEW_ITEMSpublicstaticfinalStringACTION_FOO="com.example.zouqi.bgmusicdemo.action.FOO";publicstaticfinalStringACTION_BAZ="com.example.zouqi.bgmusicdemo.action.BAZ";//action声明publicstaticfinalStringACTION_MUSIC="com.example.zouqi.bgmusicdemo.action.music";//TODO:RenameparameterspublicstaticfinalStringEXTRA_PARAM1="com.example.zouqi.bgmusicdemo.extra.PARAM1";publicstaticfinalStringEXTRA_PARAM2="com.example.zouqi.bgmusicdemo.extra.PARAM2";//声明MediaPlayer对象privateMediaPlayermediaPlayer;publicMyIntentService(){super("MyIntentService");}@OverrideprotectedvoidonHandleIntent(Intentintent){if(intent!=null){finalStringaction=intent.getAction();if(ACTION_FOO.equals(action)){finalStringparam1=intent.getStringExtra(EXTRA_PARAM1);finalStringparam2=intent.getStringExtra(EXTRA_PARAM2);handleActionFoo(param1,param2);}elseif(ACTION_BAZ.equals(action)){finalStringparam1=intent.getStringExtra(EXTRA_PARAM1);finalStringparam2=intent.getStringExtra(EXTRA_PARAM2);handleActionBaz(param1,param2);}//根据intent设置的action来执行对应服务的操作if(ACTION_MUSIC.equals(action)){handleActionMusic();}}}/***该服务执行的操作用来播放背景音乐*/privatevoidhandleActionMusic(){if(mediaPlayer==null){//根据音乐资源文件创建MediaPlayer对象设置循环播放属性开始播放mediaPlayer=MediaPlayer.create(this,R.raw.test_520);mediaPlayer.setLooping(true);mediaPlayer.start();}}/***HandleactionFoointheprovidedbackgroundthreadwiththeprovided*parameters.*/privatevoidhandleActionFoo(Stringparam1,Stringparam2){//TODO:HandleactionFoothrownewUnsupportedOperationException("Notyetimplemented");}/***HandleactionBazintheprovidedbackgroundthreadwiththeprovided*parameters.*/privatevoidhandleActionBaz(Stringparam1,Stringparam2){//TODO:HandleactionBazthrownewUnsupportedOperationException("Notyetimplemented");}}
代码中除去原来创建类时就自带的对应方法外,我自己写的方法都写了对应的中文注释,理解起来简单,这里不详细说明了。
有的同学习惯自己新建一个服务类,不用工具中的创建服务的选项来创建服务类。那么这时候你自己还需要去清单配置文件中配置这个服务类。
因为我用的是工具创建服务的选项创建的服务,所以清单配置中自动给配置了。如图:
各位同学别忘记检查配置哦!
在MainActivity中启动服务MainActivity.java类代码如下:
packagecom.example.zouqi.bgmusicdemo;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;publicclassMainActivityextendsActivity{privateIntentintent;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//启动服务播放背景音乐intent=newIntent(MainActivity.this,MyIntentService.class);Stringaction=MyIntentService.ACTION_MUSIC;//设置actionintent.setAction(action);startService(intent);}@OverrideprotectedvoidonDestroy(){super.onDestroy();if(intent!=null){//对于intentService,这一步可能是多余的stopService(intent);}}}注释依旧详细(无须过多说明)。
Demo体验给出我百度网盘的下载链接,感兴趣的同学可以去下载体验一下,很好听的一首歌哦!
Alittlebitofprogresseveryday!Comeon!