首页 > 其他分享 >AIDL使用demo

AIDL使用demo

时间:2022-12-05 16:44:36浏览次数:40  
标签:AIDL demo void 绑定 str 使用 public 客户端

AIDL使用demo

服务端:

  1. AS 创建一个app,作为服务端

  2. 在app目录下创建AIDL,自动生成aidl文件夹,Interface根据功能自定义

  3. rebuild工程

  4. java目录下添加AIDL Interface实现类作为接口功能接口实现类,供客户端new对象并使用服务端的功;再创建一个service实现类,供客户端实现,连接service

  5. 安装到测试设备上

客户端:

  1. AS创建一个app,作为客户端

  2. 将服务端工程目录下的aidl文件直接拷贝到客户端,对应目录为main目录下,即和java同级

  3. rebuild工程

  4. TestActity下绑定服务

 

 

demo主要部分

*** service端:

/*测试,功能在于输出一串字符串*/
interface IMyAidlInterface {
   void printStr(String str);
}
 
/*测试,功能在于输出一串字符串*/
interface IMyAidlInterface {
   void printStr(String str);
}
/*interface实现类,提供给客户端new对象并使用自定义接口的功能*/
public class IMyAidlInterfaceImp extends IMyAidlInterface.Stub{ //基础类,SimpleInterface.Stub对象,固定写法

   @Override
   public void printStr(String str) throws RemoteException {
       str = "new str";
       Log.d("oy", "str==" + str);
  }
}
/*服务对象,用于return interfaceImp,客户端通过绑定服务,获取interfaceImp,从而使用interface的功能*/
public class IMyAidlInterfaceService extends Service {
   Binder binder;
   @Nullable
   @Override
   public IBinder onBind(Intent intent) {
       /*存在服务启动,客户端绑定服务失败的情况,判空处理,反复检查是否为空,返回binder对象*/
       if (binder==null){
           binder = new IMyAidlInterfaceImp();
           Log.d("oy", "IMyAidlInterfaceService onBind");
      }
       return binder;//将AIDL接口的实现类发回给绑定了服务的对象
  }
}
 ****客户端  
public class MainActivity extends AppCompatActivity {
   IMyAidlInterface mInterface;
   ServiceConnection conn = new ServiceConnection() {
       @Override
       public void onServiceConnected(ComponentName name, IBinder service) {
           Log.d("oy", "服务绑定成功");
           mInterface = IMyAidlInterface.Stub.asInterface(service);//固定写法,将IBinder对象转型为SimpleInterface.Stub对象
           try {
               mInterface.printStr("printed str");
          } catch (RemoteException e) {
               e.printStackTrace();
          }
      }
       @Override
       public void onServiceDisconnected(ComponentName name) {
           mInterface = null;
           Log.d("oy", "服务绑定断开");
      }
  };
       @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Intent intent = new Intent();
       intent.setClassName("com.tripod.myapplication", "com.tripod.myapplication.IMyAidlInterfaceService");
       bindService(intent, conn, BIND_AUTO_CREATE); //传递参数,绑定服务
  }
}

 

标签:AIDL,demo,void,绑定,str,使用,public,客户端
From: https://www.cnblogs.com/a-n-yan/p/16952728.html

相关文章