Android基础--本地应用远程访问服…

来源:互联网 发布:数据库系统实现 杨冬青 编辑:程序博客网 时间:2024/05/07 01:16

      在Android中通常服务都是给当前应用程序去使用的。但也有特殊情况,那就是在手机厂商中,预装的软件中往往会用到其他软件的服务,所以就需要用到远程访问这个知识点了。

      一般步骤:

1.定义一个远程的服务类和远程接口,并在服务类中定义内部类。继承Binder和该接口。


2.在接口中调用业务逻辑方法。
3.创建本地的应用程序,设计界面和处理activity。
4.到远程接口所在的文件夹,将远程接口的扩展名修改为aidl。则该文件就成为对外开放的文件。
删除该文件中的public,重新编译远程接口。
5.在本地应用程序中创建一个和远程接口相同的包名,把修改后的aidl文件复制一份到本地应用中。
6.修改远程服务中的方法。
 public class TestService extends Service {
  @Override
  public IBinder onBind(Intentintent) {
   return newMyBinder();
  }
  public voidmethodInService(){
   System.out.println("----------methodInService----------");
  }
  private class MyBinder extendsStub{
    
   @Override
   public voidcallMethodInService() {
    //调用了服务的业务逻辑方法
    methodInService();
   }
  }
 }
本地应用程序代码:
 public class MainActivity extends Activity{
 
  private Intent intent;
  private MyConn conn;
  private IServicemyBinder;
 
  @Override
  protected void onCreate(BundlesavedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
  }
 
  public void start(View view){
 
   intent = newIntent();
   intent.setAction("com.itheima.remoteservice.REMOTESERVICE");
   startService(intent);
  }
 
  public void bind(View view){
 
   conn = newMyConn();
   bindService(intent,conn, BIND_AUTO_CREATE);
   
  public void call(Viewview){
   try {
   //调用接口的方法,间接地调用服务的业务逻辑方法
    myBinder.callMethodInService();
   } catch(RemoteException e) {
    e.printStackTrace();
   }
  }
  
  private class MyConn implementsServiceConnection{
 
   @Override
   public voidonServiceConnected(ComponentName name, IBinder service) {
    //得到IService接口类型的对象
    myBinder= Stub.asInterface(service);
   }
 
   @Override
   public voidonServiceDisconnected(ComponentName name) {
    //TODO Auto-generated method stub
   }
  }
 }

 

0 0
原创粉丝点击