Android-bindService本地服务-音乐播放-上
播放音乐的行为写在服务里,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本地服务-音乐播放-上的更多相关文章
- Android-bindService本地服务-音乐播放(后台播放)-下
在上一篇 Android-bindService本地服务-音乐播放-上,博客中是不能在后台中播放到,这次博客增加了一个后台播放 通常情况下,Activity切换到后台,Service提升到前台进程, ...
- Android应用开发--MP3音乐播放器代码实现(一)
需求1:将内存卡中的MP3音乐读取出来并显示到列表当中 1. 从数据库中查询所有音乐数据,保存到List集合当中,List当中存放的是Mp3Info对象 2. 迭代List集合,把每一个Mp3 ...
- Android基于发展Service音乐播放器
这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activit ...
- 项目源码--Android类似酷狗音乐播放器
下载源码 知识技能概要: 1.音乐文件的扫描与管理 2.音频流的解码 3. UI控件的综合使用 4.播放列表方式管理 5.随机播放方式 6.源码带详细的中文注释 ...... 详细介绍 1. 音乐文件 ...
- Android 仿百度网页音乐播放器圆形图片转圈播放效果
百度网页音乐播放器的效果 如下 : http://www.baidu.com/baidu?word=%E4%B8%80%E7%9B%B4%E5%BE%88%E5%AE%89%E9%9D%99& ...
- android测试本地服务调试流程
我今天调试的整个过程 1,安卓发现连不上本地的tomcat 2,使用浏览器直接尝试,发现可以连上 3,怀疑是安卓APP和浏览器访问有差异,后上网搜索不到APP,只有浏览器尝试 再不就是改I ...
- Android多媒体框架对音乐播放器的支持
下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些. 1. MediaScannerReceiver 这个广播接收者在接收到A ...
- ios手机Safari本地服务连不上
问题: 今天在本地起服务准备测下ios手机端页面,结果发现:页面可以打开,但是登录不上. 用alert定位了下,await fn() 报错被try()catch(){}捕获了... 原因: 该机子不支 ...
- Android课程---简单的音乐播放器
第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...
随机推荐
- Mysql中用between...and...查询日期时注意事项
select count(1) from user where regist_date between '2017-07-25 00:00:00' and '2017-07-25 24:00:00' ...
- 在Eclipse里静态导入
静态导入import static 介绍见import static和import的区别 在Eclipse里配置静态导入,步骤见下面截图的箭头 例如导入下面的jar 常用的静态导入方法如下: com. ...
- NFS 相关操作指令
1.启动NFS服务器 为了使NFS服务器能正常工作,需要启动portmap和nfs两个服务,并且portmap一定要先于nfs启动. #service portmap start #service n ...
- vuex语法精简(方便开发查阅)
vuex语法精简(方便开发查阅) store结构 state Getter Mutation actions vuex语法精简(方便开发查阅) 本文只是方便开发的时候快速查阅到相关语法,想看详细内容请 ...
- linux编程vim设置
linux环境下c网络编程vim编辑工具设置,包括自动缩进,tab键对齐等.
- rhel6.3-64 yum问题
问题如下:
- 好记性不如烂笔头-linux学习笔记3mysql数据库导入导出
1 数据库文件导出 mysqldump -uroot -p123456 test > 1.sql 2数据库文件导入 mysql -uroot -p123456 test <1.sql 3 ...
- s2选择框的全选和反选jQuery
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Cocoa Touch(四): 多线程GCD, NSObject, NSThread, NSOperationQueue
多线程的重要性不必多言,现代操作系统不可能离开进程线程的抽象.具体到ios应用,我们只能在一个进程中管理线程,主线程不应该去执行非常耗时间的后台操作导致出现卡机现象,后台的事情交给后台线程来完成. G ...
- PHP ImageMagick
简介: ImageMagick是用C语言开发图片处理程序.可以对图片进行改变大小.旋转.锐化.减色或增加特效等操作.对图片的操作,即可以通过命令行进行,也可以用C/C++.Perl.Jav ...