播放音乐的行为写在服务里,Activity去调用Service里面到方法,进行音乐播放,当Activity结束后,音乐播放器停止播放

界面:

MainActivity:

package liudeli.service1;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; import liudeli.service1.service.MyService5;
import liudeli.service1.service.inter.IMusicPlay; public class MainActivity5 extends Activity implements View.OnClickListener { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main5); initView();
initListener();
} @Override
protected void onStart() {
super.onStart();
// 绑定服务
bindService(new Intent(this, MyService5.class), connection, BIND_AUTO_CREATE);
} private Button btPlayMusic;
private Button btPausedContinue;
private Button btStop; private void initView() {
btPlayMusic = findViewById(R.id.bt_play_music);
btPausedContinue = findViewById(R.id.bt_paused_continue);
btStop = findViewById(R.id.bt_stop);
} private void initListener() {
btPlayMusic.setOnClickListener(this);
btPausedContinue.setOnClickListener(this);
btStop.setOnClickListener(this);
} private IMusicPlay iMusicPlay; private ServiceConnection connection = new ServiceConnection() {
/**
* 连接到服务
* @param name
* @param service
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iMusicPlay = (IMusicPlay) service;
} /**
* 断开连接
* @param name
*/
@Override
public void onServiceDisconnected(ComponentName name) {
}
}; @Override
protected void onDestroy() {
super.onDestroy();
// 解绑服务:注意bindService后 必须要解绑服务,否则会报 连接资源异常
if (null != connection) {
unbindService(connection);
}
} // 音乐文件到路径
private final String MUSIC_PATH = Environment.getExternalStorageDirectory() + "/cjyy.mp3"; @Override
public void onClick(View v) { if (iMusicPlay == null) {
Toast.makeText(this, "音乐播放服务连接失败", Toast.LENGTH_LONG).show();
return;
} switch (v.getId()) { case R.id.bt_play_music:
iMusicPlay.playMusic(MUSIC_PATH);
break; case R.id.bt_paused_continue:
if ("暂停播放".equals(btPausedContinue.getText().toString())) {
btPausedContinue.setText("继续播放");
iMusicPlay.pausedPlay();
} else {
btPausedContinue.setText("暂停播放");
iMusicPlay.continuePlay();
}
break; case R.id.bt_stop:
iMusicPlay.stopPlay();
break; default:
break;
}
}
}

增强版Binder扩展,接口定义:

package liudeli.service1.service.inter;

public interface IMusicPlay {

    /**
* 播放音乐
* @param musicPath 音乐文件的路径
*/
void playMusic(String musicPath); /**
* 暂停播放
*/
void pausedPlay(); /**
* 继续播放
*/
void continuePlay(); /**
* 停止播放
*/
void stopPlay();
}

Service代码:

package liudeli.service1.service;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log; import java.io.IOException; import liudeli.service1.service.inter.IMusicPlay; public class MyService5 extends Service { private final String TAG = MyService5.class.getSimpleName(); @Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "绑定成功");
return new PlayMusicBinder();
} private MediaPlayer mediaPlayer; /**
* 增强版Binder,扩展出播放音乐

Android-bindService本地服务-音乐播放-上的更多相关文章

  1. Android-bindService本地服务-音乐播放(后台播放)-下

    在上一篇  Android-bindService本地服务-音乐播放-上,博客中是不能在后台中播放到,这次博客增加了一个后台播放 通常情况下,Activity切换到后台,Service提升到前台进程, ...

  2. Android应用开发--MP3音乐播放器代码实现(一)

    需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1.   从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象 2.   迭代List集合,把每一个Mp3 ...

  3. Android基于发展Service音乐播放器

    这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activit ...

  4. 项目源码--Android类似酷狗音乐播放器

    下载源码 知识技能概要: 1.音乐文件的扫描与管理 2.音频流的解码 3. UI控件的综合使用 4.播放列表方式管理 5.随机播放方式 6.源码带详细的中文注释 ...... 详细介绍 1. 音乐文件 ...

  5. Android 仿百度网页音乐播放器圆形图片转圈播放效果

    百度网页音乐播放器的效果  如下 : http://www.baidu.com/baidu?word=%E4%B8%80%E7%9B%B4%E5%BE%88%E5%AE%89%E9%9D%99& ...

  6. android测试本地服务调试流程

    我今天调试的整个过程 1,安卓发现连不上本地的tomcat 2,使用浏览器直接尝试,发现可以连上 3,怀疑是安卓APP和浏览器访问有差异,后上网搜索不到APP,只有浏览器尝试       再不就是改I ...

  7. Android多媒体框架对音乐播放器的支持

    下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些.               1. MediaScannerReceiver                   这个广播接收者在接收到A ...

  8. ios手机Safari本地服务连不上

    问题: 今天在本地起服务准备测下ios手机端页面,结果发现:页面可以打开,但是登录不上. 用alert定位了下,await fn() 报错被try()catch(){}捕获了... 原因: 该机子不支 ...

  9. Android课程---简单的音乐播放器

    第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...

随机推荐

  1. 智能家居入门DIY——【七、添加一个LCD12864吧】

    今天加了一个LCD12864,IC看说明上是ST7567,结果一顿U8g2,发现两个问题: 1.买的时候不知道是卖家写的我理解错了还是怎么了,反正是不出汉字的. 2.U8g2太大了…………占了uno的 ...

  2. Accept Job Offer Email Template

    Accept Job Offer Email Template <Date> <Hiring Manager’s name> <Company name> < ...

  3. EMF与GEF

    基于Eclipse的编程架构 类似的场景大家基本都见过: JBPM--流程插件 Mule---ESB插件

  4. [Python] numpy.sum

    import numpy as np #Syntax: numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<class numpy._ ...

  5. oracle账户密码更新

    oracle忘记用户名密码怎样恢复 首先cmd - sqlplusw 普通用户登陆:用户名:scott(普通用户名)      密码:tiger(普通用户密码) 管理员登陆:用户名:system 密码 ...

  6. 4-30 HTML 细节摘录

     <b> 定义粗体文本. <big> 定义大号字. <em> 定义着重文字. <i> 定义斜体字. <small> 定义小号字. <s ...

  7. update svn cache 慢

    eclipse 打开了一个工程,就进行了update svn cache,弄了2个多小时了还是在进行.观察这个过程在空文件夹上也进行了不少时间,我感觉到可能方法错了.试了下关闭SVN--> sv ...

  8. XP系统下 VS2010 选中行崩溃

  9. 在Eclipse中创建Maven版的Web工程

    步骤: 1.第一步 2.第二步 3.第三步 4.第四步 选中项目,右键在弹出的对话框中选择properties 5.第五步 6.第六步

  10. cas-client登录后报INVALID_PROXY_CALLBACK

    服务器部署cas,登录后页面提示INVALID_PROXY_CALLBACK 然后查看cas的日志,日志报以下错误: 2018-06-29 11:36:06,251 ERROR [org.jasig. ...