- 简单的服务
首先在eclipse中创建Android工程TestService和TestActivity.java,同时创建服务类MyService
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Toast.makeText(this, "Service created...", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show();
}
}
其次,在AndroidManifest.xml中声明该服务,注意和activity保持平级
第三,在res目录中创建文件夹raw,添加qingshang.mp3至该文件夹。
第四,在main.xml中添加两个button,位于节点下
第五,在TestActivity.java中的onCreate回调中添加代码
public class TestActivity extends Activity {
public String MYSERVICE = "com.kortide.service.MyService";
public String CONTROLMUSICSERVICE = "com.kortide.service.ControlMusicService";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 创建2个按钮控制服务
Button startbtn = (Button) findViewById(R.id.btn_start);
Button stopbtn = (Button) findViewById(R.id.btn_stop);
startbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 启动服务,通过Intent的方法来启动
Intent serviceIntent = new Intent();
serviceIntent.setAction(MYSERVICE);
startService(serviceIntent);
}
});
stopbtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent serviceIntent = new Intent();
serviceIntent.setAction(MYSERVICE);
stopService(serviceIntent);
}
});
Toast.makeText(this, "TestActivity created...", Toast.LENGTH_LONG).show();
Log.i("CHEN", "TestActivity created...");
}
}
第六,选择菜单Run->Run,选择“Android Application”查看运行结果
- 通过ADIL调用服务
首先,创建Android工程BindService和BindService.java,创建IMusicControlService.aidl(可以使用菜单File->New->File来创建),elipse会在gen中自动创建一些代码
interface IMusicControlService
{
void playMusic();
void stopMusic();
}
其次,同上面的示例,在res目录中创建文件夹raw,添加qingshang.mp3至该文件夹。AndroidManifest.xml中声明该服务。
main.xml中添加两个button。
第三,创建类ControlMusicService
public class ControlMusicService extends Service {
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public MediaPlayer mplayer;
private final IMusicControlService.Stub binder = new IMusicControlService.Stub() {
MediaPlayer player;
@Override
public void playMusic() throws RemoteException {
Log.i("CHEN", "Play music...");
player = MediaPlayer.create(ControlMusicService.this,
R.raw.qingshang);
player.start();
}
@Override
public void stopMusic() throws RemoteException {
Log.i("CHEN", "Stop music...");
if (player.isPlaying()) {
player.stop();
}
}
};
}
在BindService.java中添加绑定服务的代码
public class BindService extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent();
intent.setClass(this,ControlMusicService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
Log.i("CHEN", "Bind service...");
Button btnplay = (Button)findViewById(R.id.btn_play);
Button btnstop = (Button)findViewById(R.id.btn_stop);
btnplay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
iMusicControlService.playMusic();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btnstop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
iMusicControlService.stopMusic();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
public IMusicControlService iMusicControlService;
private final ServiceConnection serviceConnection = new ServiceConnection() {
// 第一次连接service时会调用这个方法
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iMusicControlService = IMusicControlService.Stub
.asInterface(service);
}
// service断开的时候会调用这个方法
@Override
public void onServiceDisconnected(ComponentName name) {
iMusicControlService = null;
}
};
}
参考资料
- 通过AIDL调用Service