展会信息港展会大全

Actvity操作Service中的方法 android开发教程
来源:互联网   发布日期:2016-01-13 22:22:24   浏览:1107次  

导读:之前看到用AIDl的方法,觉得还不错。但偶然看到一种,感觉简单,但原理差不多。贴上代码大家体会下吧!public class AudioService extends Service implements MediaPlayer.OnCompletionListener{ MediaP......

之前看到用AIDl的方法,觉得还不错。但偶然看到一种,感觉简单,但原理差不多。贴上代码大家体会下吧!

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);

}

}

}

下面是activity:

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();

}

}

}

赞助本站

人工智能实验室

相关热词: Actvity 操作 Service

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港