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.




更多相关文章

  1. Android开发的硬件加速
  2. Android上面搭建 Opencv的开发环境+摄像头开启
  3. 【android】音乐播放器之service服务设计
  4. 【Tech-Android-Other】android操作sdcard中的多媒体文件——音
  5. Android之自定义一个可播放某一时间段的音乐播放器
  6. Android开启网络adb调试
  7. Android蓝牙播放如何显示歌曲信息?
  8. Android如何判断当前手机是否正在播放音乐,并获取到正在播放的音
  9. Android简易音乐播放器之界面实现(第一篇)

随机推荐

  1. Android(安卓)OpenGLES2.0(十二)——FBO离
  2. 基于jsBridge的NA与H5交互
  3. ListView已到底部和顶部的判断
  4. Android(安卓)极光推送集成与使用详解
  5. android安全问题(一) 静音拍照与被拍
  6. Android之Android(安卓)6.0权限机制及开
  7. Android(安卓)UI绘制优化及建议
  8. Android(安卓)UI 实现表格布局
  9. Android(安卓)模拟按键H5点击方案探究
  10. Android(安卓)5.0 Lollipop 短彩信接收流