博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity与Service之间交互并播放歌曲
阅读量:4501 次
发布时间:2019-06-08

本文共 6349 字,大约阅读时间需要 21 分钟。

Activity与Service之间交互并播放歌曲,为了方便,我把要播放的歌曲定死了,大家可以灵活改进

 

MService:

View Code
1 package com.tiantian.test;  2  3 import android.app.Service;  4 import android.content.Intent;  5 import android.media.MediaPlayer;  6 import android.os.Binder;  7 import android.os.Environment;  8 import android.os.IBinder;  9 import android.util.Log; 10 11 public class MService extends Service{
12 MyBinder myBinder = new MyBinder(); 13 private MediaPlayer mediaPlayer; 14 15 public class MyBinder extends Binder{
16 MService getService(){
17 return MService.this; 18 } 19 } 20 @Override 21 public IBinder onBind(Intent intent) {
22 // TODO Auto-generated method stub 23 Log.v("CAT", "onBind"); 24 return myBinder; 25 } 26 27 @Override 28 public void onCreate() {
29 // TODO Auto-generated method stub 30 super.onCreate(); 31 Log.v("CAT", "onCreate"); 32 try {
33 mediaPlayer = new MediaPlayer(); 34 mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/mp3/trhxn.mp3"); 35 mediaPlayer.prepare(); 36 } catch (Exception e) {
37 // TODO Auto-generated catch block 38 Log.v("CAT", "fail"); 39 e.printStackTrace(); 40 } 41 } 42 43 @Override 44 public void onDestroy() {
45 // TODO Auto-generated method stub 46 super.onDestroy(); 47 Log.v("CAT", "onDestroy"); 48 } 49 50 @Override 51 public int onStartCommand(Intent intent, int flags, int startId) {
52 // TODO Auto-generated method stub 53 Log.v("CAT", "onStartCommand"); 54 return super.onStartCommand(intent, flags, startId); 55 } 56 57 @Override 58 public boolean onUnbind(Intent intent) {
59 // TODO Auto-generated method stub 60 Log.v("CAT", "onUnbind"); 61 return false; 62 } 63 64 public void start(){
65 mediaPlayer.start(); 66 } 67 public void pause(){
68 mediaPlayer.pause(); 69 } 70 public void stop(){
71 mediaPlayer.stop(); 72 mediaPlayer.release(); 73 } 74 public int getDuration(){
75 return mediaPlayer.getDuration(); 76 } 77 public int getCurrentPosition(){
78 return mediaPlayer.getCurrentPosition(); 79 } 80 public void seekTo(int position){
81 mediaPlayer.seekTo(position); 82 } 83 }

MusicPlayActivity:

View Code
1 package com.tiantian.test;   2   3 import android.app.Activity;   4 import android.content.ComponentName;   5 import android.content.Intent;   6 import android.content.ServiceConnection;   7 import android.os.Bundle;   8 import android.os.Handler;   9 import android.os.IBinder;  10 import android.util.Log;  11 import android.view.View;  12 import android.view.View.OnClickListener;  13 import android.widget.Button;  14 import android.widget.SeekBar;  15  16 public class MusicPlayActivity extends Activity {
17 /** Called when the activity is first created. */ 18 MService mService; 19 private ServiceConnection conn = new ServiceConnection(){
20 21 @Override 22 public void onServiceConnected(ComponentName arg0, IBinder arg1) {
23 // TODO Auto-generated method stub 24 mService = ((MService.MyBinder)arg1).getService(); 25 Log.v("CAT", "getServiced"); 26 } 27 28 @Override 29 public void onServiceDisconnected(ComponentName name) {
30 // TODO Auto-generated method stub 31 mService = null; 32 } 33 34 }; 35 36 private SeekBar seekBar; 37 private Button playBT; 38 39 private boolean isPlaying = false; 40 private boolean isBinded = false; 41 42 private Handler mHandler; 43 @Override 44 public void onCreate(Bundle savedInstanceState) {
45 super.onCreate(savedInstanceState); 46 setContentView(R.layout.main); 47 Intent intent = new Intent(MusicPlayActivity.this, MService.class); 48 if(!isBinded){
49 bindService(intent, conn, BIND_AUTO_CREATE); 50 isBinded = true; 51 } 52 seekBar = (SeekBar) findViewById(R.id.seekBar); 53 playBT = (Button) findViewById(R.id.startBT); 54 mHandler = new Handler(); 55 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
56 57 @Override 58 public void onStopTrackingTouch(SeekBar seekBar) {} 59 60 @Override 61 public void onStartTrackingTouch(SeekBar seekBar) {} 62 63 @Override 64 public void onProgressChanged(SeekBar seekBar, int progress, 65 boolean fromUser) {
66 if(fromUser){
67 mService.seekTo((progress*mService.getDuration())/100); 68 } 69 } 70 }); 71 playBT.setOnClickListener(new OnClickListener() {
72 73 @Override 74 public void onClick(View v) {
75 // TODO Auto-generated method stub 76 if(!isPlaying){
77 mService.start(); 78 isPlaying = true; 79 playBT.setText("暂停"); 80 mHandler.post(seekBarThread); 81 }else{
82 mService.pause(); 83 isPlaying = false; 84 playBT.setText("播放"); 85 mHandler.removeCallbacks(seekBarThread); 86 } 87 } 88 }); 89 90 } 91 92 Runnable seekBarThread = new Runnable() {
93 94 @Override 95 public void run() {
96 // TODO Auto-generated method stub 97 seekBar.setProgress((mService.getCurrentPosition()*100)/mService.getDuration()); 98 mHandler.postDelayed(seekBarThread, 200); 99 } 100 }; 101 102 }

 

转载于:https://www.cnblogs.com/tiantianbyconan/archive/2012/03/07/2383440.html

你可能感兴趣的文章
Remoting异步回调,向在线用户广播消息
查看>>
python3---函数eval()
查看>>
RFID卡片的低功耗
查看>>
sqlserver2008R2 评估期已过
查看>>
js之数组操作
查看>>
Hive自定义UDAF
查看>>
【计算机视觉】双目测距(五)--匹配算法对比
查看>>
JAVA-环境部分
查看>>
Notes on <High Performance MySQL> -- Ch1: MySQL Architecture
查看>>
python基本数据类型
查看>>
理解MapReduce
查看>>
Vulkan的分层设计
查看>>
WCF 定义SOAP和REST风格的webservice
查看>>
关于display
查看>>
图片懒加载
查看>>
tomcat下jndi的三种配置方式
查看>>
JS moveStart和moveEnd方法(TextRange对象--查找与选择)
查看>>
textArea中的placeholder属性不起作用
查看>>
Swift 里字符串(一)概览
查看>>
温故知新 javascript 正则表达式(转载)
查看>>