Android启动服务播放音乐(两种启动方式)
2015-09-16 20:08
453 查看
两种服务源码下载地址。点击下载
服务有两种类型:
一、启动式服务通过startService启动
二、通过bind启动的绑定式服务
服务有两种类型:
一、启动式服务通过startService启动
package com.example.service_music; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.Bundle; import android.os.IBinder; import android.util.Log; public class StartServicePlayMusic extends Service { private static final String TAG = "StartServicePlayMusic"; private MediaPlayer mediaPlayer; @Override public IBinder onBind(Intent intent) { Log.i(TAG, "==onBind执行"); return null; } @Override public void onCreate() { Log.i(TAG, "==onCreate执行"); super.onCreate(); if (mediaPlayer == null) { mediaPlayer = MediaPlayer.create(this, R.raw.jhym); mediaPlayer.setLooping(false); } } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "==onStartCommand执行"); if (intent != null) { Bundle bundle = intent.getExtras(); int type = bundle.getInt("type"); switch (type) { case 1: play(); break; case 2: pause(); break; case 3: stop(); break; case 4: stopSelf(); break; } } return START_STICKY; } @Override public void onDestroy() { Log.i(TAG, "==onDestroy执行"); super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); } } public void play() { Log.i(TAG, "==play执行"); if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } } public void pause() { Log.i(TAG, "==pause执行"); if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } public void stop() { Log.i(TAG, "==stop执行"); if (mediaPlayer != null) { mediaPlayer.stop(); } } }
二、通过bind启动的绑定式服务
public class BindServicePlayMusic extends Service { private static final String TAG = "BindServicePlayMusic"; private MediaPlayer mediaPlayer; private IBinder binder = null; @Override public void onCreate() { Log.i(TAG, "==onCreate执行"); super.onCreate(); if (mediaPlayer == null) { mediaPlayer = MediaPlayer.create(this, R.raw.jhym); mediaPlayer.setLooping(false); } binder = new MyBinder(); } class MyBinder extends Binder { public BindServicePlayMusic getService() { return BindServicePlayMusic.this; } }; @Override public IBinder onBind(Intent intent) { Log.i(TAG, "==onBind执行"); play(); return binder; } @Override public boolean onUnbind(Intent intent) { Log.i(TAG, "==onUnbind执行"); return super.onUnbind(intent); } @Override public void onDestroy() { Log.i(TAG, "==onDestroy执行"); super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); } } public void play() { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } } public void pause() { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } public void stop() { if (mediaPlayer != null) { mediaPlayer.stop(); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件