android后台自播放音乐,Android实现后台播放音乐(Service方式)
Android实现后台播放音乐(Service方式)
实现:
在res文件夹下添加raw文件夹,添加mp3/4格式的音乐文件
注意命名规则只能是a-z,0-9,和下划线_ 不能大写字母和-
AndroidManifest.xml中
android:exported="false" >
android:exported是否支持其它应用调用当前组件
新建一个MusicService类继承Service并且implements MediaPlayer.OnCompletionListener监听播放完成事件
重写service的onCreate()方法
private MediaPlayer mediaPlayer;
//Service初始化时调用
public void onCreate(){
super.onCreate();
//初始化时就创建一个MediaPlayer进行资源链接
mediaPlayer = MediaPlayer.create(this, R.raw.floating_clound);
mediaPlayer.setOnCompletionListener(this);
}
若只是想简单的进行后台播放
重写onStartCommand 方法
@Override
public int onStartCommand (Intent intent,int flag, int startId) {
// TODO Auto-generated method stub
super.onStartCommand(intent,flag,startId);
if(!mediaPlayer.isPlaying()){
// 开始播放
mediaPlayer.start();
// 允许循环播放
mediaPlayer.setLooping(true);
}
return START_STICKY;
}
若想进行绑定
@Override
public IBinder onBind(Intent intent) {
if(!mediaPlayer.isPlaying()){
// 开始播放
mediaPlayer.start();
// 允许循环播放
mediaPlayer.setLooping(true);
}
return binder;
}
解除绑定
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
//松绑Service,会触发onDestroy()
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
return super.onUnbind(intent);
}
重写Ondestroy方法
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//先停止 再释放
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
当Audio播放完的时候触发该动作
/**
* 当Audio播放完的时候触发该动作
*/
@Override
public void onCompletion(MediaPlayer player) {
// TODO Auto-generated method stub
// 结束Service
stopSelf();
}
并且写一个类继承Binder
class MyMusicBinder extends Binder{
//返回Service对象
MusicService getService(){
return MusicService.this;
}
}
在Activity中:
// 创建自定义的音乐Service对象
private MusicService musicService;
在Activity中创建一个private connector类 (连接服务的Client)监听Service状态的变化
private class MusicConnector implements ServiceConnection {
//成功绑定时调用 即bindService()执行成功同时返回非空Ibinder对象
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
musicService = ((MusicService.MyMusicBinder) iBinder).getService();
}
//不成功绑定时调用
@Override
public void onServiceDisconnected(ComponentName componentName) {
musicService = null;
Log.i("binding is fail", "binding is fail");
}
}
在点击事件中:(点击播放和暂停按钮)
private View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Button btn = (Button) v;
try {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MusicService.class);
switch (btn.getId()) {
case R.id.play: {
conn= new MusicConnector();
bindService(intent, conn, Context.BIND_AUTO_CREATE);
break;
}
case R.id.pause: {
//结束Service
unbindService(conn);
break;
}
}
} catch (Exception e) {
}
}
};
音量相关:
通过AudioManager
AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
1 获取最大媒体音量
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
2 获取当前音量
int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
3 渐进式调节音量
adjustStreamVolume (int streamType, int direction, int flags)
4 步进式调节:(直接调到那个音量):
setStreamVolume (int streamType, int index, int flags)
int streamType 需要调整的音量类型
(以下常量定义于AudioManager类中)
STREAM_ALARM 警报
STREAM_MUSIC 音乐回放即媒体音量
STREAM_NOTIFICATION 窗口顶部状态栏Notification,
STREAM_RING 铃声
STREAM_SYSTEM 系统
STREAM_VOICE_CALL 通话
int direction 调整的方向,加或者减。(以下常量定义于AudioManager类中)
ADJUST_LOWER 降低音量
ADJUST_RAISE 升高音量
ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量
int flags 附加的一些参数
FLAG_PLAY_SOUND 调整音量时播放声音
FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个
0表示什么也没有
int index:
把音量调整到index值
报错:leaked ServiceConnection
在Activity关闭的时候,没有去关闭Service
解决: 在onDestroy() 方法中解除service的绑定(binding模式)或者stopService(非binding模式)
@Override
public void onDestroy(){
super.onDestroy();
unbindService(conn);
}
问题: 暂停音乐再重新播放会重头开始
因为调用onbind又执行了onDestroy
具体的启动情况有下:
1.当启动时,单独调用bindService方法,在unbindService后,会执行service的onUnbind,再执行onDestroy方法。
2.当启动时,先调用startService,再调用bindService方法后,在unbindService后,会执行service的onUnbind,不会执行onDestroy方法。除非你在执行stopService.
3. 先调用startService,在调用stopService,会执行service的onDestroy方法
android后台自播放音乐,Android实现后台播放音乐(Service方式)相关推荐
- android 带记忆功能的播放器源码,【全开源可二开】带后台管理面板的在线音乐播放器Android应用APP源码...
这是一款带后台管理面板的在线音乐播放器Android应用APP源码,可让您更快地构建在线和离线android音频播放器,代码全开源适合二次开发.该源码自带2个紫色和橙色主题(允许您添加更多主题),多语 ...
- Android 音乐APP(五)音乐通知栏、后台播放音乐
Android 音乐通知栏 前言 正文 ① 通知栏按钮点击监听 ② 通知栏点击监听 ③ 通知栏业务处理 ④ 运行效果图 结语 前言 这篇文章的标题有些言简意赅了,也突出了这篇文章的核心,那就是通知 ...
- android服务绑定音乐播放器,Android开发【04-21求助贴】使用后台服务的音乐播放器...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import android.Manifest; import android.content.pm.PackageManager; import and ...
- android ios av tv,iOS AVPlayer 实现后台连续播放视频
最近接到一个需求,需要做一个在后台播放视频的功能.折腾了一下,最后总算完成了.因此写一篇文章,介绍下具体的实现步骤,也说说自己遇到的坑,算是总结和记录. 前言 当 App 退到后台时,会进入 susp ...
- android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...
我注意到有时Async任务无法正常运行,实际上它的doInBackground()方法没有被调用,这种情况主要发生在该活动在后台运行任何服务时. 例如,当音乐在带有服务的后台运行时,Async任务不会 ...
- Android 系统(73)---Android判断你的应用在前台还是在后台
Android判断你的应用在前台还是在后台 /*** 判断应用是否是在后台*/public static boolean isBackground(Context context) {Activity ...
- Android 音乐播放器的开发教程(六)service的运用及音乐列表点击播放 ----- 小达
service的运用及音乐列表点击播放 按照前几篇博客的步骤,应该能看到自己手机里的音乐列表了,但是现在还只能看,不能点,还需要再给ListView添加点击事件的监听,接着启动一个Service来播放 ...
- ios和android操作收拾,iOS和Android后台机制的比较
发件人: 首先,让我们了解ios中所谓的"后台进程"是怎么回事吗? 让我尽可能的清楚: iOS多任务栏不包含"所有正在运行的应用程序的列表". 它包含" ...
- android开发音乐播放器,Android开发简易音乐播放器
这里介绍一个简易的音乐播放器,供大家参考,具体内容如下 效果图如下: 但是,由于这是一个简易版的音乐播放器,所播放的音乐只有一首,且被写死,但,操作却十分简单,方便理解! 这是代码的主要设计: 音乐主 ...
最新文章
- Nginx与php的整合
- 华为服务器MLC硬盘ID号,RH2288H RH5885H V3 3.5寸 SAS SATA华为服务器硬盘架子 支架
- 阿里云实时计算,前世功,今生能!
- CSS3笔记之定位篇(二)z-index
- 浅谈传统企业网络运营那些事儿
- 图像处理理论-颜色模式
- 更多特征变量却未能带来随机森林分类效果的提升
- UVA10934 Dropping water balloons【DP】
- 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例
- MySpace:.Net架构网站的王者
- 集成maven和Spring boot的profile 专题
- 罪恶都市联机器无法显示服务器,《GTA:罪恶都市》多人联机!你的童年又回来了,梦想成真了!...
- 27 | 风控系统:如何从海量业务数据中,挖掘黑灰产?
- Java实现微信公众号模板消息管理群发和单发
- Java多线程系列--【JUC锁04】-公平锁(二)
- 微信公众号中,怎么插入代码块?(微信公众号中,代码块怎么排版?)
- 隐函数存在定理3的证明Jacobi_20160503
- Python:1020 月饼
- 机器学习 深度学习技术区别_体育技术机器学习金钱和灵感的圣杯
- Android Preference详解