- 论坛徽章:
- 80
|
二.实战
我们可以定义一个本地服务继承Service,然后在这个服务里播放媒体播放器或者记录地理位置变化。通常有时候我们的Service要与Activity交互,那么可以可以定义一个内部类,返回这个Service,当然我们要考虑到如果是以绑定方式启动服务,那么内部类可以定义为继承Binder,然后返回本地服务,具体代码如下。- package com.dongzi;
- import android.app.Service;
- import android.content.Intent;
- import android.media.MediaPlayer;
- import android.os.Binder;
- import android.os.IBinder;
- import android.util.Log;
- public class LocalService extends Service {
- private static final String TAG = "LocalService";
- private IBinder binder=new LocalService.LocalBinder();
-
- @Override
- public IBinder onBind(Intent intent) {
-
- return binder;
- }
- MediaPlayer mediaPlayer=null;
- @Override
- public void onCreate() {
- Log.i(TAG, "onCreate");
- //这里可以启动媒体播放器
- // if(mediaPlayer==null)
- // mediaPlayer=MediaPlayer.create(this, uri);
- super.onCreate();
- }
- @Override
- public void onStart(Intent intent, int startId) {
- Log.i(TAG, "onStart");
- super.onStart(intent, startId);
- }
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- Log.i(TAG, "onStartCommand");
- return START_STICKY;
- }
-
-
- @Override
- public void onDestroy() {
- Log.i(TAG, "onDestroy");
- super.onDestroy();
- }
-
- //定义内容类继承Binder
- public class LocalBinder extends Binder{
- //返回本地服务
- LocalService getService(){
- return LocalService.this;
- }
- }
-
-
- }
复制代码 我们可以从上面知道
//定义内容类继承Binder
public class LocalBinder extends Binder{
//返回本地服务
LocalService getService(){
return LocalService.this;
}
}
可以返回这个服务,然后activity可以通过服务调用服务的方法了。
那么如何启动服务呢?从上面基础知识中,我们知道有2种方法,如下:- //启动服务
- private void startCustomService(){
- Intent intent=new Intent(this,LocalService.class);
- startService(intent);
- }
复制代码 或者- LocalService localService=null;
- //用bindService方法启动服务
- private void BinderService(){
- Intent intent=new Intent(this,LocalService.class);
- bindService(intent, new ServiceConnection(){
- @Override
- public void onServiceConnected(ComponentName componentName, IBinder binder) {
- //调用bindService方法启动服务时候,如果服务需要与activity交互,
- //则通过onBind方法返回IBinder并返回当前本地服务
- localService=((LocalService.LocalBinder)binder).getService();
- //这里可以提示用户,或者调用服务的某些方法
- }
- @Override
- public void onServiceDisconnected(ComponentName componentName) {
- localService=null;
- //这里可以提示用户
- }
- }, Context.BIND_AUTO_CREATE);
- }
复制代码 在绑定服务的时候,需要一个服务连接对象,ServiceConnection,服务一旦连接,就会调用onServiceConnected方法,我们可以在这个方法里面返回我们的本地服务对象,具体看代码;而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源。 |
|