#1.ServiceConnect匿名类里的方法分别会在活动与服务成功绑定以及连接断开的时候调用。
BIND_AUTO_CREATE表示活动与服务绑定后自动创建服务。
public int position;
private IMusicPlayerService service;//自动生成的java文件
private ServiceConnection con=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder iBinder) {
service=IMusicPlayerService.Stub.asInterface(iBinder);
if (service!=null){
try {
service.openAudio(position);//间接调用了服务MusicPlayerService中的方法
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
if (service!=null){
try {
service.stop();
service=null;
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audioplayer);
initView();
getData();
bindAndStartService();
}
private void bindAndStartService() {
Intent intent=new Intent(this, MusicPlayerService.class);
bindService(intent,con,BIND_AUTO_CREATE);
intent.setAction("vera.audio_service");
startService(intent);//避免多次启动服务
}
private void getData() {
//传过来的intent中带有整型"position",就是音乐列表中的位置信息。
position=getIntent().getIntExtra("position",0);
}
private void initView() {
}
onServiceConnected中的service.openAudio(position);//间接调用了服务MusicPlayerService中的方法
IMusicPlayerService.Stub stub = new IMusicPlayerService.Stub() {
MusicPlayerService service = MusicPlayerService.this;
@Override
public void openAudio(int position) throws RemoteException {
service.openAudio(position);
}
}
#2.设置服务的action
<service
android:name=".MusicPlayerService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="vera.audio_service"/>
</intent-filter>
</service>
private void bindAndStartService() {
Intent intent=new Intent(this, MusicPlayerService.class);
bindService(intent,con,BIND_AUTO_CREATE);
intent.setAction("vera.audio_service");
startService(intent);//避免多次启动服务
}