-
在AS中新建两个应用 (AIDL_1和AIDL_2)
-
在两个应用的app目录下新建一个文件夹(app->new->AIDL->AIDL File),AS会帮你自动建包和aidl接口
*注意两个应用的 com.permissionx.aidl_1 的这个包名要一样interface IMyAidlInterface { /*** Demonstrates some basic types that you can use as parameters* and return values in AIDL.*/ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,double aDouble, String aString);int getId(); String getName(); }
-
AIDL1 为服务端,所以新建一个Service
public class MyService extends Service { public MyService() { }@Override public IBinder onBind(Intent intent) { return mBinder; }private final IMyAidlInterface.Stub mBinder=new IMyAidlInterface.Stub() { @Overridepublic void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { }@Overridepublic int getId() throws RemoteException { return 3;}@Overridepublic String getName() throws RemoteException { return "AIDL_1_Test";} };Ser }
然后在manifests中注册Service
<serviceandroid:name=".MyService"android:enabled="true"android:exported="true"><intent-filter><action android:name="AIDL.test"/></intent-filter></service>
-
AIDL_2为客户端,去bind AIDL_1的Service
public class MainActivity extends AppCompatActivity { 在这里插入代码片 private TextView textView;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=findViewById(R.id.tv_test);Intent intent=new Intent();intent.setAction("AIDL.test"); //为AIDL_1 注册服务时指定的 actionintent.setPackage("com.permissionx.aidl_1"); bindService(intent,conn, Context.BIND_AUTO_CREATE);}private final ServiceConnection conn=new ServiceConnection() { private IMyAidlInterface mService;@Overridepublic void onServiceConnected(ComponentName name, IBinder service) { mService = IMyAidlInterface.Stub.asInterface(service);// 接收到来自AIDL_1的数据runOnUiThread(()->{ try { Log.e(TAG,mService.getName());textView.setText(mService.getName());} catch (RemoteException e) { e.printStackTrace();}});}@Overridepublic void onServiceDisconnected(ComponentName name) { runOnUiThread(()->{ try { Log.e("TAG",mService.getName()+"xxx");textView.setText("无数据");} catch (RemoteException e) { e.printStackTrace();}});mService=null;} }; }
-
测试,先点开AID_1这个服务端,然后点开AIDL_2客户端,发现TextView中数据为AIDL_1中的数据,完成数据传递
详细解决方案
两个应用间传递数据(AIDL)实例
热度:62 发布时间:2023-12-25 08:56:02.0
相关解决方案
- aidl,怎么out 参数
- AIDL 调用的有关问题
- 高手看上,android aidl 的有关问题
- android AIDL 调用空指针,求好手解答
- 2021-09-24 aidl bindService的时候AppsFilter: interaction: PackageSetting{6f0372c com./10126} -> Pack
- 探究android-aidl---bindService的绑定及其内部原理
- Android的IPC机制(中)—— Kotlin 详细实现 AIDL
- Android Service 之三(Bind Service,使用 AIDL)
- AIDL 方法参数的in out inout前缀作用
- Android进阶学习(7)-- AIDL
- JAVA层Bidner——AIDL
- AIDL 发生异常的原因 Android java.lang.SecurityException: Binder invocation to an incorrect interface
- Android之IPC2————AIDL
- Task :compileDebugAidl FAILED aidl.exe io_delegate.cpp:50] Failed to GetFullPathName QT 编译安卓出错
- 两个应用间传递数据(AIDL)实例
- AIDL:注意事项
- AIDL(初解)
- Android AIDL 跨进程通信
- AIDL-AndRoid接口描述语言实现跨进程通讯
- 简单音乐播放实例的实现,Android Service AIDL 远程调用服务
- 在android 源码里 编译 aidl 报错 的问题
- AIDL 进程间通信的一个小小的总结
- Android Aidl Service 进程间通讯的学习