Android开发利用service实现背景音乐播放
2015-07-03 08:44
615 查看
设计思路:
建议在播放音乐的时候把MediaPlayer放在Service中,因为如果放在Activity中会使得界面特别卡。而且音乐不能放到后台里播放,一旦退出Activity,音乐就会暂停播放。
可以在Activity中布局相关的界面,例如按钮等。然后通过这个Activitiy来启动这个Service。要通过UI与Service交互,可以通过Intent对象传递消息。更复杂一些,要实现Service向Activity发送消息,并利用这些消息来更新UI,这可以用广播机制,例如告诉Activity是否正在播放,播放进度,当前播放歌曲条目等信息。
项目整体布局:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/18/c3b8afb4cef3236078375e9257b3c8e0)
界面放两个Button按钮。一个播放,一个暂停
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/18/0305d58b56d1c97c080a5951fa15ba48)
下面开始写相关的代码
1. Activity类:
2.Service类:
建议在播放音乐的时候把MediaPlayer放在Service中,因为如果放在Activity中会使得界面特别卡。而且音乐不能放到后台里播放,一旦退出Activity,音乐就会暂停播放。
可以在Activity中布局相关的界面,例如按钮等。然后通过这个Activitiy来启动这个Service。要通过UI与Service交互,可以通过Intent对象传递消息。更复杂一些,要实现Service向Activity发送消息,并利用这些消息来更新UI,这可以用广播机制,例如告诉Activity是否正在播放,播放进度,当前播放歌曲条目等信息。
项目整体布局:
界面放两个Button按钮。一个播放,一个暂停
下面开始写相关的代码
1. Activity类:
package com.example.service; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { Button playing, stop;// 声明控件变量 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findId(); playing.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startService(new Intent(MainActivity.this, AudioService.class));// 启动service服务转向AudioService } }); stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { stopService(new Intent(MainActivity.this, AudioService.class));// 停止service } }); } void findId() {// 获取控件id playing = (Button) findViewById(R.id.playing); stop = (Button) findViewById(R.id.stop); } protected void onResume() {// 在 Activity 从 Pause 状态转换到 Active 状态时被调用。 super.onResume(); startService(new Intent(MainActivity.this, AudioService.class)); } @Override protected void onDestroy() {// 防止程序退出后音乐不停止问题。在destroy中停止服务 // TODO Auto-generated method stub super.onDestroy(); stopService(new Intent(MainActivity.this, AudioService.class));// 停止service } public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
2.Service类:
package com.example.service; /** * 多线程实现后台播放背景音乐的service */ import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.Binder; import android.os.IBinder; public class AudioService extends Service implements MediaPlayer.OnCompletionListener { // 实例化MediaPlayer对象 MediaPlayer player; private final IBinder binder = new AudioBinder(); @Override public IBinder onBind(Intent intent) { return binder; } public void onCreate() { super.onCreate(); // 从raw文件夹中获取一个应用自带的mp3文件 player = MediaPlayer.create(this, R.raw.qq); player.setOnCompletionListener(this);// 是为player对象添加一个监听事件,用于监听事件完成 player.setLooping(true);// } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); if (!player.isPlaying()) { new MusicPlayThread().start(); } else player.isPlaying(); return START_STICKY; } /** * 当Audio播放完的时候触发该动作 */ public void onCompletion(MediaPlayer mp) { stopSelf();// 结束Service } public void onDestroy() { super.onDestroy(); if (player.isPlaying()) { player.stop(); } player.release(); } // 为了和Activity交互,我们需要定义一个Binder对象 public class AudioBinder extends Binder { // 返回Service对象 public AudioService getService() { return AudioService.this; } } private class MusicPlayThread extends Thread { public void run() { if (!player.isPlaying()) { player.start(); } } } }
3、在清单文件AndroidManifest.xml中配置Service <service android:name=".AudioService" />
相关文章推荐
- Android 如何创建组合控件
- android该系统的应用API选择演示版本
- android在线浏览图片
- Android之NDK开发
- Android图片浏览
- Android.mk 变量解释
- Android-ndk中的.mk文件语法规则
- Android下修改hosts文件-重启有效
- gradle DSL method not found: android()错误解决办法
- Android Mms之:深入理解对话列表管理
- Android判断软键盘弹出并隐藏的简单完美解决方案
- Android 控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
- android-training-course-in-chinese
- setOnClickListener()与报错OnClickListener()原因
- Android 四大组件之BroadcastReceiver
- android studio基本使用零碎整理
- android下 按钮点击 的四种写法
- Android对话框(Dialog)小结
- Android对话框(Dialog)小结 分类: Android 2015-07-02 23:49 10人阅读 评论(0) 收藏
- android 自定义