Service混合开发播放音乐 //借鉴
来源:互联网 发布:网页游戏传奇源码下载 编辑:程序博客网 时间:2024/05/21 15:47
-----------------------------------------------------Service-------------------------------------------------------
private MediaPlayer mp;
IBinder b = new MyBinder(); // 给接口赋值,通过创建接口的实现类// 中间人,定义一种功能
public class MyBinder extends Binder {
// 中间人有启动音乐功能(start)
public void start() {
MusicService.this.start11(); //
}
public void pause() {
MusicService.this.pause11(); // 调用服务的暂停
}
}
/**
* onBind----------->通过bindService的启动方式时,会调用
* 返回值IBinder:作用Activity和Service的中间人
*/
@Override
public IBinder onBind(Intent intent) {
// 获取资源根路径
File fp = Environment.getExternalStorageDirectory(); // 获取sd卡目录
Log.d("TAG", "++++++++" + fp.getPath()); // 获取 .../0 文件夹
File music = new File(fp, "Music/horse.mp3");
// 判断音乐文件路径
Log.d("TAG", "music文件是否存在:++++++" + music.exists());
try {
// 播放本地音乐
mp.setDataSource(music.getPath()); // 给播放器设置路径
// 播放网络上的音乐
// mp.setDataSource("www.");
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
Log.d("TAG", "service返回中间人:++++++++++++++"+b);
return b;
}
@Override
public void unbindService(ServiceConnection conn) {
super.unbindService(conn);
Log.d("TAG", "unbindService+++++++++++++++++++");
if(mp!=null){
mp.release(); //从内存里清除
mp=null;
}
}
// 创建音乐对象 new
@Override
public void onCreate() {
super.onCreate();
Log.d("TAG", "onCreate+++++++++++++++++++");
mp = new MediaPlayer();
}
/**
* 播放音乐,放在
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("TAG", "onStartCommand ++++++++++++++++++++++++");
return super.onStartCommand(intent, flags, startId);
}
// 启动
public void start11() {
mp.start();
}
// 在服务中创建暂停方法
public void pause11() {
// 暂停音乐
mp.pause();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("TAG", "onDestroy ++++++++++++++++++++++++");
if (mp != null) {
mp.release();
mp = null;
}
}
------------------------------------------------------------------------------Activity-----------------------------------------------------------------------------------------
private Button btn1;
private Button btn2;
private Intent service;
// 绑定服务时,需要客户端(Activity)与服务建立连接对象
private ServiceConnection conn;
private MyBinder mb; //中间人
private boolean b; //查看服务是否连接
private Button btnbind;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.start);
btn2 = (Button) findViewById(R.id.stop);
btnbind = (Button) findViewById(R.id.bind);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btnbind.setOnClickListener(this);
// Intent作用: 1>Activity之间跳转 2>Activity开启广播 3>Activity开启服务
service = new Intent(this, MusicService.class);
// 给服务连接对象赋值
conn = new ServiceConnection() {
// 服务断开
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
// 服务连接
@Override
public void onServiceConnected(ComponentName name, IBinder service) { // 系统把中间人赋值service
mb = (MyBinder) service;
Log.d("TAG", "onServiceConnected:++++++++++++++++"+mb);
}
};
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bind:
// 向使用startService: oncreate---onStartCommand--->stopService():Service的生命周期才结束
startService(service);
// 使用bindService的目的: 获取中间人
b = MainActivity.this.bindService(service, conn, BIND_AUTO_CREATE); // 绑定服务
Log.d("TAG", "MainActivity:绑定服务:++++++++++"+b);
break;
case R.id.start:
if (b) {
mb.start();
} else {
Toast.makeText(this, " +++++服务未连接", 0).show();
}
break;
case R.id.stop:
// 停止服务
mb.pause();
break;
default:
break;
}
}
//在Activity销毁时,调用解绑方法,
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
MainActivity.this.unbindService(conn); //如果不调用,程序退出时,会在后台报异常
}
- Service混合开发播放音乐 //借鉴
- 音乐播放上一首下一首 //借鉴
- 【Android 基础】MediaPlayer(1) 与Service 混合播放音乐
- 使用Service播放音乐
- 使用service播放音乐
- android 音乐播放service
- Android Service播放音乐
- service 音乐播放
- Service实现音乐播放
- Service后台播放音乐
- Service播放音乐实例
- Service + 音乐播放
- Service后台播放音乐
- Service播放音乐
- Service播放音乐
- Android应用开发--MP3音乐播放器Service实现
- Android应用开发--MP3音乐播放器Service实现
- Android开发之基于Service的音乐播放器
- html和CSS基础学习(十四)
- Throwing Balls into the Baskets LightOJ
- post解析
- 线段树模板(区间修改)——hdu1698
- poj 2352 Stars
- Service混合开发播放音乐 //借鉴
- 运动目标跟踪算法综述
- RL论文
- jsp的九大内置对象
- c语言实现单链表面试题之进阶篇
- Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
- 3 Steps(二分图初步)
- 合并分支到master上
- freemarker的基本使用和常用标签