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

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

      一般步骤:

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


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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值