网站首页 > Android开发

Android Service 音乐播放实例(2)


[3] src目录下MusicService.java源码:
 
view plain
  1. package com.andyidea.service;  
  2. import android.app.Service;  
  3. import android.content.Intent;  
  4. import android.media.MediaPlayer;  
  5. import android.os.IBinder;  
  6. import android.util.Log;  
  7. import android.widget.Toast;  
  8. public class MusicService extends Service {  
  9. //为日志工具设置标签  
  10. private static String TAG = "MusicService";  
  11. //定义音乐播放器变量  
  12. private MediaPlayer mPlayer;  
  13.   
  14. //该服务不存在需要被创建时被调用,不管startService()还是bindService()都会启动时调用该方法  
  15. @Override  
  16. public void onCreate() {  
  17. Toast.makeText(this, "MusicSevice onCreate()"  
  18. , Toast.LENGTH_SHORT).show();  
  19. Log.e(TAG, "MusicSerice onCreate()");  
  20.   
  21. mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.music);  
  22. //设置可以重复播放  
  23. mPlayer.setLooping(true);  
  24. super.onCreate();  
  25. }  
  26.   
  27. @Override  
  28. public void onStart(Intent intent, int startId) {  
  29. Toast.makeText(this, "MusicSevice onStart()"  
  30. , Toast.LENGTH_SHORT).show();  
  31. Log.e(TAG, "MusicSerice onStart()");  
  32.   
  33. mPlayer.start();  
  34.   
  35. super.onStart(intent, startId);  
  36. }  
  37. @Override  
  38. public void onDestroy() {  
  39. Toast.makeText(this, "MusicSevice onDestroy()"  
  40. , Toast.LENGTH_SHORT).show();  
  41. Log.e(TAG, "MusicSerice onDestroy()");  
  42.   
  43. mPlayer.stop();  
  44.   
  45. super.onDestroy();  
  46. }  
  47. //其他对象通过bindService 方法通知该Service时该方法被调用  
  48. @Override  
  49. public IBinder onBind(Intent intent) {  
  50. Toast.makeText(this, "MusicSevice onBind()"  
  51. , Toast.LENGTH_SHORT).show();  
  52. Log.e(TAG, "MusicSerice onBind()");  
  53.   
  54. mPlayer.start();  
  55.   
  56. return null;  
  57. }  
  58. //其它对象通过unbindService方法通知该Service时该方法被调用  
  59. @Override  
  60. public boolean onUnbind(Intent intent) {  
  61. Toast.makeText(this, "MusicSevice onUnbind()"  
  62. , Toast.LENGTH_SHORT).show();  
  63. Log.e(TAG, "MusicSerice onUnbind()");  
  64.   
  65. mPlayer.stop();  
  66.   
  67. return super.onUnbind(intent);  
  68. }  
  69.   
  70. }  
 
[4] src目录下MusicServiceActivity源码:
 
view plain
  1. package com.andyidea.service;  
  2. import android.app.Activity;  
  3. import android.content.ComponentName;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.content.ServiceConnection;  
  7. import android.os.Bundle;  
  8. import android.os.IBinder;  
  9. import android.util.Log;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13. import android.widget.Toast;  
  14. public class MusicServiceActivity extends Activity {  
  15.   
  16. //为日志工具设置标签  
  17. private static String TAG = "MusicService";  
  18.   
  19. /** Called when the activity is first created. */  
  20. @Override  
  21. public void onCreate(Bundle savedInstanceState) {  
  22. super.onCreate(savedInstanceState);  
  23. setContentView(R.layout.main);  
  24.   
  25. //输出Toast消息和日志记录  
  26. Toast.makeText(this, "MusicServiceActivity",  
  27. Toast.LENGTH_SHORT).show();  
  28. Log.e(TAG, "MusicServiceActivity");  
  29.   
  30. initlizeViews();  
  31. }  
  32.   
  33. private void initlizeViews(){  
  34. Button btnStart = (Button)findViewById(R.id.startMusic);  
  35. Button btnStop = (Button)findViewById(R.id.stopMusic);  
  36. Button btnBind = (Button)findViewById(R.id.bindMusic);  
  37. Button btnUnbind = (Button)findViewById(R.id.unbindMusic);  
  38.   
  39. //定义点击监听器  
  40. OnClickListener ocl = new OnClickListener() {  
  41.   
  42. @Override  
  43. public void onClick(View v) {  
  44. //显示指定  intent所指的对象是个   service  
  45. Intent intent = new Intent(MusicServiceActivity.this,MusicService.class);  
  46. switch(v.getId()){  
  47. case R.id.startMusic:  
  48. //开始服务  
  49. startService(intent);  
  50. break;  
  51. case R.id.stopMusic:  
  52. //停止服务  
  53. stopService(intent);  
  54. break;  
  55. case R.id.bindMusic:  
  56. //绑定服务  
  57. bindService(intent, conn, Context.BIND_AUTO_CREATE);  
  58. break;  
  59. case R.id.unbindMusic:  
  60. //解绑服务  
  61. unbindService(conn);  
  62. break;  
  63. }  
  64. }  
  65. };  
  66.   
  67.  //绑定点击监听  
  68. btnStart.setOnClickListener(ocl);  
  69. btnStop.setOnClickListener(ocl);  
  70. btnBind.setOnClickListener(ocl);  
  71. btnUnbind.setOnClickListener(ocl);  
  72. }  
  73.   
  74. //定义服务链接对象  
  75. final ServiceConnection conn = new ServiceConnection() {  
  76.   
  77. @Override  
  78. public void onServiceDisconnected(ComponentName name) {  
  79. Toast.makeText(MusicServiceActivity.this, "MusicServiceActivity onSeviceDisconnected"  
  80. , Toast.LENGTH_SHORT).show();  
  81. Log.e(TAG, "MusicServiceActivity onSeviceDisconnected");  
  82. }  
  83.   
  84. @Override  
  85. public void onServiceConnected(ComponentName name, IBinder service) {  
  86. Toast.makeText(MusicServiceActivity.this, "MusicServiceActivity onServiceConnected"  
  87. ,Toast.LENGTH_SHORT).show();  
  88. Log.e(TAG, "MusicServiceActivity onServiceConnected");  
  89. }  
  90. };  
  91. }  
 
[5] 最后,我们别忘了在AndroidManifest.xml配置文件中添加对Service的注册。即在application节点中添加
  <service android:name=".MusicService"/> 进行注册。
[6] 我们来看下程序运行后的Log.e中显示的Service生命周期

[7] 我们在Android终端设备中查看下刚才启动的音乐播放服务,看看我们退出程序后,是不是该程序的服务还在运行的呢?按如下步骤:Menu --> Settings --> Applications --> Running services 。在弹出的 Running services 中可以看到有哪些服务在运行。

这样我们就看到我们退出程序后,是由于该服务还在后台运行着,所以我们的音乐还可以继续播放着。就这样,我们就可以一边享受音乐,一边可以聊QQ,或者浏览新闻等等。

发表评论

验证码: 点击验证码
  • 手机软件开发
    专业手机软件开发|手机客户端开发
    j2me手机软件开发|Android开发
  • 手机游戏开发
    手机游戏开发|symbian游戏开发
    Android开发|j2me手机游戏开发
  • windows phone开发
    windows phone软件开发,windows phone游戏开发
  • Android开发
    Android手机软件开发,Android游戏开发,android 软件开发
  • symbian开发
    symbian手机软件开发,symbian游戏开发,塞班手机软件开发

信息化系统集成

定制解决方案

手机软件定制