当前位置: 首页 > 编程日记 > 正文

背景音乐的实现

通过利用Service来实现该功能
将要播放的歌曲放入raw文件夹中

[html] view plaincopy
  1. <strong>新建一个AudioService 类,<span style="font-family: Arial, Helvetica, sans-serif;">AudioService 类</span><span style="font-family: Arial, Helvetica, sans-serif;">继承 android.app.Service,几个有关Service 的重要概念如下:</span>  
  2. 1. Service 对象以 separated process 的方式执行,这表示 Service 与 UI(Activity)并不在同一个 process 里执行,而是各自在不同的 process 执行。
  3. 2. Android应用程序是在 Activity 启动与停止 Service。
  4. 3. 重载(override)onStart() 方法(method)在 Service 被启动,执行我们想要的背景功能。
  5. 4. 重载 onDestroy() 方法在 Service 被停止时,停止执行中的背景功能。</strong>  
[html] view plaincopy
  1. <pre name="code" class="html"><strong>2、AudioService类  
  2. [java] </strong>  
  3. package demo.camera;
  4. import android.app.Service;
  5. import android.content.Intent;
  6. import android.media.MediaPlayer;
  7. import android.os.Binder;
  8. import android.os.IBinder;
  9. import android.widget.MediaController.MediaPlayerControl;
  10. /**
  11. * 为了可以使得在后台播放音乐,我们需要Service
  12. * Service就是用来在后台完成一些不需要和用户交互的动作
  13. * @author Administrator
  14. *
  15. */
  16. public class AudioService extends Service implements MediaPlayer.OnCompletionListener{
  17. MediaPlayer player;
  18. private final IBinder binder = new AudioBinder();    
  19. @Override
  20. public IBinder onBind(Intent arg0) {
  21. // TODO Auto-generated method stub
  22. return binder;
  23. }
  24. /**
  25. * 当Audio播放完的时候触发该动作
  26. */
  27. @Override
  28. public void onCompletion(MediaPlayer player) {
  29. // TODO Auto-generated method stub
  30. stopSelf();//当结束时,便结束Service
  31. }
  32. //实例化MediaPlayer对象
  33. public void onCreate(){
  34. super.onCreate();
  35. //我们从raw文件夹中获取一个应用自带的mp3文件
  36. player = MediaPlayer.create(this, R.raw.eason);    
  37. player.setOnCompletionListener(this);
  38. }
  39. /**
  40. * 该方法在SDK2.0才开始有的,用来替代原来的onStart方法
  41. */
  42. public int onStartCommand(Intent intent, int flags, int startId){
  43. if(!player.isPlaying()){
  44. player.start();
  45. }
  46. return START_STICKY;
  47. }
  48. public void onDestroy(){
  49. //super.onDestroy();
  50. if(player.isPlaying()){
  51. player.stop();
  52. }
  53. player.release();
  54. }
  55. //为了和Activity交互,我们需要定义一个Binder对象
  56. class AudioBinder extends Binder{
  57. //返回Service对象
  58. AudioService getService(){
  59. return AudioService.this;
  60. }
  61. }
  62. //后退播放进度
  63. public void haveFun(){
  64. if(player.isPlaying() && player.getCurrentPosition()>2500){    
  65. player.seekTo(player.getCurrentPosition()-2500);
  66. }
  67. }
  68. }
[html] view plaincopy
  1. <pre name="code" class="html">至此,一个完整的服务生成,接下来是在Activity中启动服务。  
  2. <strong>修改 AndroidManifest.xml:  
  3. 在 Package Explorer 视窗里找到目前 Android 项目的资讯描述档,名称为 AndroidManifest.xml。这是一个用來描述 Android 应用程序「整体资讯」的文件,每个 Android 应用程序项目都会有一个。在这里修改 Androidmanifest.xml 的目的是为了「 Android 应用程序加入一个 Service 类别」,这样才有办法驱动 Service。</strong>  
  4. [html]
[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"    
  3. package="com.android"    
  4. android:versionCode="1"    
  5. android:versionName="1.0" >    
  6. <uses-sdk android:minSdkVersion="10" />    
  7. <application    
  8. android:icon="@drawable/ic_launcher"    
  9. android:label="@string/app_name" >    
  10. <activity    
  11. android:name=".WebTestActivity"    
  12. android:label="@string/app_name" >    
  13. <intent-filter>    
  14. <action android:name="android.intent.action.MAIN" />    
  15. <category android:name="android.intent.category.LAUNCHER" />    
  16. </intent-filter>    
  17. </activity>    
  18. <service    
  19. <pre name="code" class="html">            android:name=".AudioService"  

android:exported="true" android:process=":remote"> </service> </application> </manifest>

转载于:https://www.cnblogs.com/whm1234/p/4650893.html

相关文章:

打牌软件可以控制吗_使用crm软件真的可以帮助企业省钱吗

使用crm软件真的可以帮助企业省钱吗大多数企业管理者认为&#xff1a;“客户关系系统有什么用?真的可以帮助企业发展吗?自己做一套excel版本不就行了”其实&#xff0c;不以为然&#xff0c;当我们去寻找用户时或者管理用户需要工作人员做一些繁琐的事情会极大的降低员工的工…

MS_SQL_获取字符串最后出现的字符串及位置

一&#xff0e;如&#xff1a;6.7.8.2.3.4.x得到最后一个.后面的字符串&#xff1a; declare str1 varchar(50) set str16.7.8.2.3.4.x select REVERSE(SUBSTRING(REVERSE(str1),1,CHARINDEX(.,REVERSE(str1))-1)) -------- string:x-- --------------------------------------…

redis(3)-redis基本类型

在redis安装目录下存在redis自带的客户端&#xff0c;启动即可使用。如果设置了密码&#xff0c;需要输入auth 123456进行验证。123456为密码。 redis的基本数据类型&#xff1a; 1.字符串类型(String)    redis 127.0.0.1:6379> SET mykey "redis" OK redis 1…

虚函数与虚继承寻踪

封装、继承、多态是面向对象语言的三大特性&#xff0c;熟悉C的人对此应该不会有太多异议。C语言提供的struct&#xff0c;顶多算得上对数据的简单封装&#xff0c;而C的引入把struct“升级”为class&#xff0c;使得面向对象的概念更加强大。继承机制解决了对象复用的问题&…

信息记录拉取失败_天猫入驻为什么失败?猫店侠做详细解读

天猫入驻为什么失败&#xff1f;这是很多商家都想要知道的一件事情&#xff0c;猫店侠想说其实这也很正常&#xff0c;只要不是一味盲目的入驻&#xff0c;就还有机会。首先失败商家要看看失败的反馈内容&#xff0c;看看是哪方面不达标&#xff0c;再着重进行补充&#xff0c;…

Linux查看目录挂载点

用命令 df 即可 # df /var/lib/ Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 135979984 66905292 62055896 52% /加上-kh更容易看些&#xff1a; # df /var/lib/ -kh Filesystem Size Used Avail Use% Mounted o…

Android:你好,androidX!再见,android.support

190325 补充&#xff1a;莫名问题的解决 181106 补充&#xff1a;修改未迁移成功的三方库 1、AndroidX简介 点击查看Android文档中对androidx的简介 按照官方文档说明 androidx 是对 android.support.xxx 包的整理后产物。由于之前的support包过于混乱&#xff0c;所以&#xf…

设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

简单工厂&#xff0c;工厂方法&#xff0c;抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来&#xff0c;优化了系统的架构&#xff0c;并且增强了系统的扩展性。 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解…

云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE

数据中心存储演化——FCoE数据中心三大基础&#xff1a;主机 网络 存储在云计算推动下&#xff0c;存储基础架构在发生演变传统存储结构DAS、SAN在发展中遇到了布线复杂、能耗增多的缺点&#xff08;原生性&#xff09;&#xff0c;需要对架构做根本的改变。FCoE是业界无可争议…

在plsql里面怎么去掉空行_盐渍樱花怎么做?详细做法告诉您,一年都不会坏,学会再也不用买...

盐渍樱花怎么做&#xff1f;详细做法告诉您&#xff0c;一年都不会坏&#xff0c;赶紧收藏学会它&#xff01;樱花季说的就是现在&#xff0c;虽然到了飘落的季节&#xff0c;但是还是到处可见的樱花朵朵。俗话说&#xff1a;花无百日红。真的是啊&#xff0c;每年的三四月是最…

Linux基础知识——常用shell命令介绍(三)

一、改变文件权限 chmod:change mode 语法&#xff1a;# chmod [选项-option] 权限 FILE 选项&#xff1a;-R 递归修改权限 --reference 参照文件或目录给予权限 权限定义方式&#xff1a; 1.同时修改三类用户的权限: 8进制数字方式 # chmod 666 /abc /*将/abc的权限改为…

免费版CloudFlare CDN基本设置参考

CDN有很多&#xff0c;网上都有介绍&#xff0c;用户比较多的CloudFlare CDN大家都知道&#xff0c;配置起来也比较简单&#xff0c;合理的配置&#xff0c;才能提升网站的速度和网站安全。不同的网站需求配置不一样&#xff0c;以下是我的配置情况&#xff0c;仅供参考。 我网…

从Java类库看设计模式

//From http://www.uml.org.cn/j2ee/201010214.asp 很多时候&#xff0c;对于一个设计来说(软件上的&#xff0c;建筑上的&#xff0c;或者它他工业上的)&#xff0c;经验是至关重要的。好的经验给我们以指导&#xff0c;并节约我们的时间;坏的经验则给我们以借鉴&#xff0c;可…

method=post 怎么让查看源代码看不到_网站文档不能复制怎么办?教你3个小妙招,1分钟轻松化解...

不知道大家平常在查找资料时&#xff0c;碰到网页资料不能下载时&#xff0c;是怎么样进行处理的。那么笔者今天就来分享我查找不能复制文档时&#xff0c;所用的3个小妙招&#xff0c;帮助轻松化解&#xff0c;一起来看看吧。1、保存网页当我们遇到一个不能直接复制的文档&…

Missing number

题目链接&#xff1a;http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id114468 题目大意&#xff1a; 多组案例T&#xff0c;每个案例含n2个数据&#xff0c;这n2个数据构成一组有序列&#xff0c;现在已知这组数据中的n个&#xff0c;请找出缺失的两个数据。 …

[leetcode]Surrounded Regions @ Python

原题地址&#xff1a;https://oj.leetcode.com/problems/surrounded-regions/ 题意&#xff1a; Given a 2D board containing X and O, capture all regions surrounded by X. A region is captured by flipping all Os into Xs in that surrounded region. For example, X X …

Android Drawable 详解(教你画画!)

参考 1、Android中的Drawable基础与自定义Drawable2、android中的drawable资源3、Android开发之Shape详细解读 Drawable分类 Noxml标签Class类含义1shapeShapeDrawable特定形状&#xff0c;模型的图样2selectorStateListDrawable不同状态选择不同的图样3layer-listLayerDrawabl…

Carrier frequency 和 EARFCN的关系

Carrier frequency 和 EARFCN的关系 我们处理UE log时&#xff0c;看到LTE cell 都是用EARFCN/PCI来标示的&#xff0c;那么EARFCN和frequency 之间是什么关系呢&#xff1f; 1. EARFCN: 缩写: E-UTRA Absolute Radio Frequency Channel Number, 取值范围: 0…

十五天精通WCF——第六天 你必须要了解的3种通信模式

十五天精通WCF——第六天 你必须要了解的3种通信模式 原文:十五天精通WCF——第六天 你必须要了解的3种通信模式wcf已经说到第六天了&#xff0c;居然还没有说到这玩意有几种通信模式&#xff0c;惭愧惭愧&#xff0c;不过很简单啦&#xff0c;单向&#xff0c;请求-响应&#…

从未在一起更让人遗憾_明明是真爱,却又不能在一起

深爱一个人&#xff0c;若是无缘成为夫妻相偎相依在一起&#xff0c;在分开的很长一段时间里&#xff0c;一定会在深夜难眠&#xff0c;在梦中哭醒&#xff0c;因为你太爱他&#xff0c;太想他。人生那么长&#xff0c;在我们的一生中&#xff0c;总会有一个人&#xff0c;在你…

使用 IntraWeb (8) - 系统模板

我们可以自定义系统错误模板, 编辑 IWError.html 放到模板文件夹后, 它将替换默认的模板.{在主页面, 这是要模拟一个系统错误} procedure TIWForm1.IWButton1Click(Sender: TObject); beginRelease; end;修改前后的 IWError.html 对比:我想办法抠出了 IWError.html 源文件, 从里…

Java中常量定义的几种方式

编程中使用常量的优点&#xff1a; 常量提取出来有利于代码阅读&#xff0c;而且下次再做这种判断不用手写或复制并且提高代码的复用率&#xff0c;方便修改&#xff0c;直接通过常量类就能得到。不过我觉得提取出来并不会有利于代码性能提升&#xff0c;因为常量分配在内存的常…

PCT-36.523

LTE v 36 523-1:Part 1: Protocol conformance specification 定义了每个Case 运行的流程 v 36.523-2:Part 2: Implementation Conformance Statement(ICS) proforma specification. Table 4-1 定义了每个Case的详细背景: 1. 最早那个release 引入的这一c…

测试笔试题之相关概念

1、对手机软件的压力测试通常包括&#xff1a; &#xff08;1&#xff09;存储压力 &#xff08;2&#xff09;响应能力压力 &#xff08;3&#xff09;网络流量压力 &#xff08;4&#xff09;边界压力 2、针对手机应用软件的系统测试&#xff0c;我们通常从如下几个角度开展&…

ios 代码设置控件宽高比_用宽高比调整UIImage的大小?

我知道这很老了&#xff0c;但是感谢那篇文章-它使我从尝试使用比例尺重定向到绘制图像。万一对任何人都有利&#xff0c;我做了一个扩展类&#xff0c;我将在这里进行介绍。它允许您调整图像的大小&#xff0c;如下所示&#xff1a;UIImage imgNew img.Fit(40.0f, 40.0f);我不…

jquery入门 修改网页背景颜色

我们在浏览一些网站&#xff0c;尤其是一些小说网站的时候&#xff0c;都会有修改页面背景颜色的地方&#xff0c;这个功能使用jquery很容易实现。 效果图&#xff1a; show you code: <!doctype html> <html> <head> <meta charset"utf-8">…

对于装饰器Decorator的理解

装饰器是用来描述函数&#xff0c;记录日志&#xff0c;提供信息的函数&#xff0c;是一个为了更好的服务主函数的副函数&#xff1a; 详情还需查看&#xff1a;廖雪峰装饰器 关键在于&#xff1a;【import functools是导入functools模块。模块的概念稍候讲解。现在&#xff0c…

UE的注册流程

协议36.508 4.5节 有个表格写的很清楚&#xff1a; Table 4.5.2.3-1: UE registration procedure (state 1 to state 2)

五大主流数据库模型

转载自 五大主流数据库模型 导读&#xff1a;无论是关系型数据库还是非关系型数据库&#xff0c;都是某种数据模型的实现。本文将为大家简要介绍5种常见的数据模型&#xff0c;让我们来追本溯源&#xff0c;窥探现在流行的数据库解决方案背后的神秘世界。 什么是数据模型&#…

laytpl语法_layui语法基础

一.按钮区分​ 1.按照主题划分​ 原始&#xff1a;class "layui-btn layui-btn-primary"​ 默认&#xff1a;class "layui-btn"​ 百搭&#xff1a;class "layui-btn layui-btn-normal"​ 暖色&#xff1a;class "layui-btn layui-btn-…