播放音乐的行为写在服务里,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. EF-CodeFirst系列100

    .学习资料地址: CodeFirst:https://msdn.microsoft.com/zh-cn/data/jj193542 一.CodeFirst迁移(Migration) .工具--> ...

  2. zufeoj 1018 阶乘第k位是多少(sprintf)

    题目描述     n的阶乘定义为n!=1*2*3*……*n  如3!=6     n!通常最后会有很多0,如5!=120  最后有一个0,现在统计n!去除末尾的0后,最后k位是多少 输入     第一 ...

  3. Java ScriptEngine 解析js

    Java ScriptEngine 解析js 1.脚本引擎 ① 通过脚本名称获取:      ScriptEngine engine = new ScriptEngineManager().getEn ...

  4. 三.jQuery源码解析之jQuery的框架图

    这张图片是对jQuery源码截图,一点一点拼出来的. 现在根据这张图片来对jQuery框架做一些说明. 一.16~9404行可以发现,最外层是一个自调用函数.当jQuery初始化时,这个自调用函数包含 ...

  5. uwsgi的使用

    uwsgi是一个WEB服务器,只要用于python部分,类似于nginx ,apache 1 使用pip命令安装 pip install uwsgi 安装成功以后 可以做一个简单的测试 2 新建一个t ...

  6. C# 二元一次方程参数求解

    本文记录了关于求直线斜率及纵截距值的简单方法,只是简单的记录下求解思路,最终还需根据具体项目进行优化. 设直线方程式为:y=kx+b 编程思想: 1.代入y1与x1的值,得到:y1=kx1+b 2.代 ...

  7. Git----时光穿梭机之管理修改04

    假如你已经阅读了https://www.cnblogs.com/cxq0017/p/9663452.html Git工作区和暂存区,并且已经掌握了暂存区的概念,下面我们要讨论的是,为什么Git比其他版 ...

  8. 读取和反序列化Hadoop二进制文件

    目录 问题描述 反序列化代码 问题描述 Hadoop在运行MR时,经常要将一些中间结果存到本地,为了节省存储空间,Hadoop采用序列化机制(Hadoop的序列化机制和Java的有所不同)将数据保存为 ...

  9. ArcGIS帮助文档VS帮助文档不能复制图片的解决方法

    ArcGIS帮助文档VS帮助文档不能复制图片的解决方法(非常有用)   问题:ArcGIS的学习文档,开发文档,vs的帮助文档,一般都不能复制图片,有的甚至不能复制文本.   解决方法 在文档空白处右 ...

  10. S EAI 客户主数据导入_test(detail)

    一. 客户主数据模板导出 客户主数据和新联系人导入 Account_Config.ini文件 [Public] ConnectString=host="siebel://10.10.1.15 ...