android在service中播放音乐
Android大作业确实挺难的,断断续续半个月到现在还有几个功能没有完成(中间又去忙了点其他事),到现在为止最强烈的感受是学习安卓是非常需要经验的活计,而且资料也不像之前学习的算法,c++之类的非常详实(像刷oj一搜poj****全是题解,而且都是正确的)我按照网上的博客一模一样照打的都能报错....(巨坑啊)
我个人参考的是《第一行代码》这本书,它对于初学者相当友好,不过在背景音乐的播放中出现了些困难.
现在要求是在任意演示页面都应该播放背景音乐,很明显如果直接写在activity中,那么一旦service停止了(跳转到其他页面)就会关闭背景音乐,而且也很难处理在需要的时候关闭音乐(放视频,退出app)故应将音乐的播放写在service中.
为了用户的体验(毛的用户啊,估计老师也就随便瞄两眼....),我们在开始设置一个提问框,询问是否开启音乐
import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.ActivityInfo;import android.os.Bundle;import android.widget.ImageView;public class question extends BaseActivity{//question.class @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_question);//布局文件叫layout_question AlertDialog.Builder dialog = new AlertDialog.Builder(question.this);//弹出对话框,判断是否需要开启音乐 dialog.setTitle("注意"); dialog.setMessage("是否播放音乐"); dialog.setCancelable(false); dialog.setPositiveButton("否",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) { Intent intent = new Intent(question.this,MainActivity.class); intent.putExtra("extra_data","0");//向MainActivity传递值 startActivity(intent); }}); dialog.setNegativeButton("是",new DialogInterface.OnClickListener(){ @Overridepublic void onClick(DialogInterface arg0, int arg1) { Intent intent = new Intent(question.this,MainActivity.class); intent.putExtra("extra_data","1");//向MainActivity传递值 startActivity(intent); } }); dialog.show();}}
这里有一个向后面传值的过程,因为我要知道前面一个activity用户选择的值,因为我不知道如何传递布尔类型的值,所以直接传了两种字符串过去,是"1"就开启音乐,是"0"就暂时不开启音乐 MainActivity.class
public class MainActivity extends BaseActivity {private Button button1;//成长历程private Button button2;//兴趣爱好private Button button3;//一键关注private Button button4;//退出private boolean MusicSwitch;//判断音乐是否开启(true为播放,false为不播放)private ImageView imageView;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); String s=intent.getStringExtra("extra_data");//获得上一次的是否开启音乐的值 if (s.equals("1")) MusicSwitch=true; else MusicSwitch=false; imageView = (ImageView) findViewById(R.id.image_view);//实例化对应的插图 if (MusicSwitch) { Intent intentSV=new Intent(MainActivity.this,MyService.class); startService(intentSV); imageView.setImageResource(R.drawable.music_start); } else imageView.setImageResource(R.drawable.music_off); imageView.setOnClickListener(new OnClickListener() {//当图标被按时可以开关音乐@Overridepublic void onClick(View arg0) {if (MusicSwitch) { imageView.setImageResource(R.drawable.music_off);MusicSwitch = false;Intent intentSV=new Intent(MainActivity.this,MyService.class);stopService(intentSV);}else {imageView.setImageResource(R.drawable.music_start);MusicSwitch = true;try{Intent intentSV=new Intent(MainActivity.this,MyService.class);startService(intentSV);}catch(Exception e){e.printStackTrace(); }}}}); //后面省略无关代码 }}}
这里我用了两个个插图,如果MusicSwitch为真就播放音乐,同时表现音乐开启的图标,否则就不播放音乐,展示音乐关闭的图标,而每一次点击关闭和开启都会改变MusicSwitch的值.
另外说下插图一般在res下的draw****的第一个文件夹下,直接将图片移进去就好.
而本文的重点就是
Intent intentSV=new Intent(MainActivity.this,MyService.class); startService(intentSV);
Service是什么,个人感觉说白了就是一些你希望只要在某个页面开启后,在后台默默持续工作,知道某个页面可以随时关闭的无名英雄.而音乐就是只闻其声不见其人所以两者绝配啊。
里面有onCreate,onStartCommand,onDestroy,onBind等方法
一旦知道用户要开启音乐,我们可以调用startService(),它会调用在onStartCommand时创建一个MediaPlayer对象来放音乐,而一旦知道用户要关闭音乐,我们可以调用
stopService,它会调用onDestory销毁MediaPlayer对象,由于我对于Service的操作是随时随地的,而且只要不操作这个Service将一直跑下去,那么就符合我们的要求.
import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.IBinder;public class MyService extends Service{private MediaPlayer mp;@Overridepublic void onCreate(){super.onCreate();//继承onCreate方法try{mp= new MediaPlayer();mp=MediaPlayer.create(MyService.this,R.raw.music);}catch(IllegalStateException e){ e.printStackTrace();}}@Overridepublic IBinder onBind(Intent intent){return null;}@Overridepublic int onStartCommand(Intent intent,int flags,int startId){mp.start(); mp.setOnErrorListener(new MediaPlayer.OnErrorListener() { public boolean onError(MediaPlayer mp, int what, int extra) { // TODO Auto-generated method stub // 释放资源 try { mp.release(); } catch (Exception e) { e.printStackTrace(); } return false; } }); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy(){//服务停止时停止播放音乐并释放资源mp.stop();mp.release();mp=null;super.onDestroy();}}
音乐我是在res下新建一个raw文件夹,将mp3文件直接放进去即可,用法是
mp=MediaPlayer.create(MyService.this,R.raw.music);
第一个是活动名(这里是服务名)。 当然不要忘记注册这个Service.
更多相关文章
- Android开发的硬件加速
- Android上面搭建 Opencv的开发环境+摄像头开启
- 【android】音乐播放器之service服务设计
- 【Tech-Android-Other】android操作sdcard中的多媒体文件——音
- Android之自定义一个可播放某一时间段的音乐播放器
- Android开启网络adb调试
- Android蓝牙播放如何显示歌曲信息?
- Android如何判断当前手机是否正在播放音乐,并获取到正在播放的音
- Android简易音乐播放器之界面实现(第一篇)