Activity與Service之間交互并播放歌曲的實現(xiàn)代碼
更新時間:2013年07月29日 09:38:44 作者:
以下是對Activity與Service之間交互并播放歌曲的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友可以過來參考下
Activity與Service之間交互并播放歌曲,為了方便,我把要播放的歌曲定死了,大家可以靈活改進

MService:
復制代碼 代碼如下:
package com.tiantian.test;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
public class MService extends Service{
MyBinder myBinder = new MyBinder();
private MediaPlayer mediaPlayer;
public class MyBinder extends Binder{
MService getService(){
return MService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.v("CAT", "onBind");
return myBinder;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.v("CAT", "onCreate");
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/mp3/trhxn.mp3");
mediaPlayer.prepare();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.v("CAT", "fail");
e.printStackTrace();
}
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.v("CAT", "onDestroy");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.v("CAT", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
Log.v("CAT", "onUnbind");
return false;
}
public void start(){
mediaPlayer.start();
}
public void pause(){
mediaPlayer.pause();
}
public void stop(){
mediaPlayer.stop();
mediaPlayer.release();
}
public int getDuration(){
return mediaPlayer.getDuration();
}
public int getCurrentPosition(){
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int position){
mediaPlayer.seekTo(position);
}
}
MusicPlayActivity:
復制代碼 代碼如下:
package com.tiantian.test;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
public class MusicPlayActivity extends Activity {
/** Called when the activity is first created. */
MService mService;
private ServiceConnection conn = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
// TODO Auto-generated method stub
mService = ((MService.MyBinder)arg1).getService();
Log.v("CAT", "getServiced");
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mService = null;
}
};
private SeekBar seekBar;
private Button playBT;
private boolean isPlaying = false;
private boolean isBinded = false;
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(MusicPlayActivity.this, MService.class);
if(!isBinded){
bindService(intent, conn, BIND_AUTO_CREATE);
isBinded = true;
}
seekBar = (SeekBar) findViewById(R.id.seekBar);
playBT = (Button) findViewById(R.id.startBT);
mHandler = new Handler();
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(fromUser){
mService.seekTo((progress*mService.getDuration())/100);
}
}
});
playBT.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(!isPlaying){
mService.start();
isPlaying = true;
playBT.setText("暫停");
mHandler.post(seekBarThread);
}else{
mService.pause();
isPlaying = false;
playBT.setText("播放");
mHandler.removeCallbacks(seekBarThread);
}
}
});
}
Runnable seekBarThread = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
seekBar.setProgress((mService.getCurrentPosition()*100)/mService.getDuration());
mHandler.postDelayed(seekBarThread, 200);
}
};
}
相關(guān)文章
Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法【附源碼下載】
這篇文章主要介紹了Android開發(fā)實現(xiàn)橫向列表GridView橫向滾動的方法,結(jié)合實例形式分析了Android橫向列表GridView實現(xiàn)橫向滾動的相關(guān)布局與功能實現(xiàn)技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2018-01-01
Android實現(xiàn)跟隨手指拖動并自動貼邊的View樣式(實例demo)
本文通過實例代碼給大家介紹了android實現(xiàn)跟隨手指拖動并自動貼邊的View樣式,效果非常棒,具有參考借鑒價值,需要的朋友參考下吧2017-01-01
Flutter監(jiān)聽當前頁面可見與隱藏狀態(tài)的代碼詳解
文章介紹了如何在Flutter中使用路由觀察者來監(jiān)聽應用進入前臺或后臺狀態(tài)以及頁面的顯示和隱藏,并通過代碼示例講解的非常詳細,需要的朋友可以參考下2025-03-03
基于DownloadManager的簡單下載器編寫小結(jié)
Android自帶的DownloadManager是一個很好的下載文件的工具。該類在API level 9之后出現(xiàn),它已經(jīng)幫我們處理了下載失敗、重新下載等功能,整個下載過程全部交給系統(tǒng)負責,不需要我們過多的處理,非常的nice。關(guān)鍵的是用起來也很簡單,稍微封裝一下就可以幾句話搞定下載2017-12-12

