安卓调用服务里面的方法,不能直接调用服务里面的方法,必须通过一个代理(或者是一个通道)
创建服务并调用里面的方法步骤:
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("月亮之上"); } }