android aidl使用记录

两年不用,突然使用有点蒙了,记录一下

服务端(提供执行能力的客户端,即写service的)

  • 创建aidl类

在这里插入图片描述
在这里插入图片描述
clean一下项目他会自动创建帮助类

在这里插入图片描述

  • 创建服务

public class RemoteService extends Service {

    private MyBinder mMyBinder;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        if (mMyBinder == null) {
            mMyBinder = new MyBinder();
        }
        return mMyBinder;
    }

    public class MyBinder extends IRtcService.Stub {

        @Override
        public String getBookName() throws RemoteException {
            return "大保健";
        }

        @Override
        public void setBookNumber(int number) throws RemoteException {
            LogUtil.e("number==>" + number);
        }
    }
}

  • 配置文件
<service
            android:name=".RemoteService"
            android:enabled="true"
            android:exported="true"
            android:process=":rtc_remote">
            <intent-filter>
                <action android:name="com.fuyao.module_webrtc.RemoteService" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>

客户端

  • 将服务端的aidl文件夹copy到项目中来

在这里插入图片描述

  • 绑定服务使用

public class Main2Activity extends AppCompatActivity {

    private IRtcService iRtcService;
    private Intent intent;

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mConnection != null) {
            unbindService(mConnection);
            stopService(intent);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        
        intent = new Intent();
        intent.setClassName("com.fuyao.elf_android_center", "com.fuyao.module_webrtc.RemoteService");
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
    }

    private ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            iRtcService = IRtcService.Stub.asInterface(service);
            try {
                iRtcService.setBookNumber(11111111);
                String bookName = iRtcService.getBookName();
                LogUtil.e("----->" + bookName);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            if (mConnection != null) {
                try {
                    iRtcService = null;
                    unbindService(mConnection);
                } catch (Exception e) {

                }
            }
        }
    };
}

  • 测试

    先启动服务端,然后启动客户端

    服务端接收数据

    在这里插入图片描述
    客户端接收数据

在这里插入图片描述
完成

发布了316 篇原创文章 · 获赞 660 · 访问量 122万+

猜你喜欢

转载自blog.csdn.net/huangxiaoguo1/article/details/104842647