Android多媒体学习六:利用Service实现背景音乐的播放
Android同意我们使用Service组件来完毕后台任务。这些任务的同意不会影响到用户其它的交互。
1、Activity类
- package demo.camera;
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
- import android.view.View;
- /**
- * 演示Activity怎样利用Service来完毕后台Audio的播放功能
- * 同一时候怎样将Service和Activity进行绑定
- * @author Administrator
- *
- */
- public class BackgroundAudioDemo extends Activity {
- private AudioService audioService;
- //使用ServiceConnection来监听Service状态的变化
- private ServiceConnection conn = new ServiceConnection() {
- @Override
- public void onServiceDisconnected(ComponentName name) {
- // TODO Auto-generated method stub
- audioService = null;
- }
- @Override
- public void onServiceConnected(ComponentName name, IBinder binder) {
- //这里我们实例化audioService,通过binder来实现
- audioService = ((AudioService.AudioBinder)binder).getService();
- }
- };
- public void onCreate(Bundle savedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.back_audio);
- }
- public void onClick(View v){
- int id = v.getId();
- Intent intent = new Intent();
- intent.setClass(this, AudioService.class);
- if(id == R.id.btn_start){
- //启动Service。然后绑定该Service,这样我们能够在同一时候销毁该Activity,看看歌曲是否还在播放
- startService(intent);
- bindService(intent, conn, Context.BIND_AUTO_CREATE);
- finish();
- }else if(id == R.id.btn_end){
- //结束Service
- unbindService(conn);
- stopService(intent);
- finish();
- }else if(id == R.id.btn_fun){
- audioService.haveFun();
- }
- }
- }
2、Service类
- package demo.camera;
- import android.app.Service;
- import android.content.Intent;
- import android.media.MediaPlayer;
- import android.os.Binder;
- import android.os.IBinder;
- import android.widget.MediaController.MediaPlayerControl;
- /**
- * 为了能够使得在后台播放音乐,我们须要Service
- * Service就是用来在后台完毕一些不须要和用户交互的动作
- * @author Administrator
- *
- */
- public class AudioService extends Service implements MediaPlayer.OnCompletionListener{
- MediaPlayer player;
- private final IBinder binder = new AudioBinder();
- @Override
- public IBinder onBind(Intent arg0) {
- // TODO Auto-generated method stub
- return binder;
- }
- /**
- * 当Audio播放完的时候触发该动作
- */
- @Override
- public void onCompletion(MediaPlayer player) {
- // TODO Auto-generated method stub
- stopSelf();//结束了。则结束Service
- }
- //在这里我们须要实例化MediaPlayer对象
- public void onCreate(){
- super.onCreate();
- //我们从raw目录中获取一个应用自带的mp3文件
- player = MediaPlayer.create(this, R.raw.tt);
- player.setOnCompletionListener(this);
- }
- /**
- * 该方法在SDK2.0才開始有的。替代原来的onStart方法
- */
- public int onStartCommand(Intent intent, int flags, int startId){
- if(!player.isPlaying()){
- player.start();
- }
- return START_STICKY;
- }
- public void onDestroy(){
- //super.onDestroy();
- if(player.isPlaying()){
- player.stop();
- }
- player.release();
- }
- //为了和Activity交互,我们须要定义一个Binder对象
- class AudioBinder extends Binder{
- //返回Service对象
- AudioService getService(){
- return AudioService.this;
- }
- }
- //后退播放进度
- public void haveFun(){
- if(player.isPlaying() && player.getCurrentPosition()>2500){
- player.seekTo(player.getCurrentPosition()-2500);
- }
- }
- }
3、在清单文件AndroidManifest.xml中配置Service
<service
android:name=".AudioService" />
Android多媒体学习六:利用Service实现背景音乐的播放的更多相关文章
- Android开发学习之路--Service之初体验
android最后一个组件便是service了,终于学习到最后一个组件了,从年前的开发环境的搭建,到现在学到最后一个组件花了三周的时间,期间记录的点点滴滴,照着书本学习编写的代码都受益匪浅,这里要感谢 ...
- Android开发学习之路-Service和Activity的通信
在很多时候,Service都不仅仅需要在后台运行,还需要和Activity进行通信,或者接受Activity的指挥,如何来实现,来看代码. 定义一个服务 // 创建一个服务,然后在onBind()中返 ...
- Android JNI 学习(六):Object Operations Api
一.AllocObject jobjectAllocObject(JNIEnv *env, jclass clazz); 分配新 Java 对象而不调用该对象的任何构造函数.返回该对象的引用. cla ...
- Android多媒体系列2:利用MediaRecorder实现录音
- Android开发学习之路--MediaPlayer之简单音乐播放器初体验
很多时候我们都会用手机来播放音乐,播放视频,那么具体地要怎么实现呢,其实主要是MediaPlayer类来完成的.下面通过简单的例子来实现一首歌曲的播放吧.新建工程MediaPlayerStudy,这里 ...
- 【Android 多媒体应用】使用MediaCodec解码使用AudioTrack播放音频数据
1.MainActivity.java import android.app.Activity; import android.os.Bundle; import android.os.Environ ...
- 【Android 多媒体应用】使用MediaRecoder录制,MediaPlayer播放音频数据
1.MainActivity.java import android.annotation.TargetApi; import android.app.Activity; import android ...
- Android多媒体访问
Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(inter ...
- Android(java)学习笔记181:利用Service在后台播放背景音乐
1.在android应用程序里,有一种没有UI的类(android.app.Service)——Service.简单来说,Service是一个 background process(背景程序),通过背 ...
随机推荐
- Android网络编程(十)Retrofit2后篇[注解]
G相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 An ...
- iOS富文本(一)属性化字符串
概述 iOS一些复杂的文本布局一般都是由底层的Core Text来实现的,直到iOS7苹果发布了Text Kit框架,Text Kit能够很简单实现一些复杂的文本样式以及布局,而Text Kit富文本 ...
- 多线程程序调用fork的现象
- 鸟书shell 学习笔记(二) shell中正則表達式相关
通配符与正則表達式的差别 通配符是bash原生支持的语法,正則表達式是处理字符串的一种表示方式, 正則表達式须要支持的工具支持才干够 语系设置 : export LANG=C grep alias 设 ...
- [HTML5] aria-label & aria-labelledby
'aria-labelledby' overwrite 'aria-label' overwirte native element label. TOP-LEFT: aria-label overwr ...
- jenkins启动失败
一:http://localhost:8080已经可以进了 二:修改端口 只是因为8080端口已经有程序占用了,需要修改端口号,但是在jenkins.xml文件中修改端口号,并不起作用. 解决方法是: ...
- Linux体验之旅(一)——制作U启,安装rhel-server-6.3
U启制作: 双击UltraISO: 点击文件→打开: 选择rhel-server6.3 点击启动→选择写入硬盘映像 最后选择格式化优盘→写入→完毕 注意:启动盘制作完毕后一定记得将rhel-serve ...
- android:padding 与 android:margin的差别
android:padding Padding 为内边框,指该控件内部内容,如文本/图片距离该控件的边距 android:margin Margin 为外边框,指该控件距离边父控件的边距
- 【转】如何在Mac 终端升级ruby版本
原文网址:https://segmentfault.com/a/1190000003784636 rvm是什么?为什么要安装rvm呢,因为rvm可以让你拥有多个版本的Ruby,并且可以在多个版本之间自 ...
- Tool-DB:Navicat
ylbtech-Tool-DB:Navicat Navicat是一套快速.可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.它的设计符合数据库管理员.开发人员及中小企业的 ...