安卓调用服务里面的方法,不能直接调用服务里面的方法,必须通过一个代理(或者是一个通道)
创建服务并调用里面的方法步骤:
1.创建一个自己需要的服务;
2.在清单文件中配置;
3.在activity中调用事件方法;
示例的简单代码:
定义自己的服务
public class MyService extends Service {
//绑定intent 为了返回给activity 用来调用服务里面的方法(实际就是一个中间的通道或者是代理)
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
System.out.println("绑定成功。。");
return new MyBind();
}
//实现一个接口用来绑定返回给activity
public class MyBind extends Binder{
public void callchangesing(String singname){
changesing(singname);
}
}
//一个service被创建出来的时候调用
@Override
public void onCreate() {
// TODO Auto-generated method stub
System.out.println("创建成功。。。");
super.onCreate();
}
//一个service被销毁的时候调用
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
//服务里面的方法
public void changesing(String singname){
Toast.makeText(getApplicationContext(), "唱歌:" + singname, 0).show();
}
配置清单文件
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.jit.testservice.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity><span style="color:#ff0000;">
<service android:name="com.jit.testservice.MyService">
</service></span>
</application>
在activity中定义单击事件:
public class MainActivity extends Activity {
private MyService.MyBind binder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 绑定开启服务
public void bind(View view){
Intent intent = new Intent(this, MyService.class);
bindService(intent, new MyServiceCnn(), BIND_AUTO_CREATE);
}
//实现serviceconnection接口 用来绑定服务
public class MyServiceCnn implements ServiceConnection{
// 绑定服务的时候开启服务返回来的binder用来调用service中的方法
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
// TODO Auto-generated method stub
binder = (MyBind) arg1;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
}
}
public void unbind(View view){
}
//调用服务里面的方法
public void changesing(View view){
binder.callchangesing("月亮之上");
}
}