[关闭]
@cxm-2016 2016-08-16T11:32:49.000000Z 字数 1253 阅读 2726

Android Studio中使用Kotlin语言实现AIDL通信[图文讲述]

android no


话不多说,直接上步骤:

服务端

工程名:KotlinAidlService

创建AIDL文件

这里需要提醒的是,一定要用在相应的包(这个包相当重要,建议创建一个独立的aidl包)上

点击 右键->New->AIDL->AIDL file 的方式创建文件,最好不要手动创建。这里我创建了一个名字为MyInterface的文件。
文件创建完成后就该修改文件了,这里添加了这样一个方法

  1. interface MyInterface {
  2. String getString(String info);
  3. }


创建完成后我们点击编译(运行按钮左边的小锤子)
如果你有过Eclipse的AIDL开发经验的话会发现这里貌似找不到生成的接口文件!其实接口文件是有的,只不过隐藏的比较深。

我们不需要关心接口被放在哪了,只要能够正常的调用就行了。

创建服务

现在我们创建一个Kotlin类MyAidlService并继承Service
然后我们重写其中的onBind方法,返回我们aidl接口的实现

  1. class MyAidlService : Service() {
  2. override fun onBind(intent: Intent?): IBinder = object : MyInterface.Stub() {
  3. override fun getString(info: String?): String = "hello $info"
  4. }
  5. }


因为我们这里只是简单地测试,所以我的实现效果就是 客户端发送一个字符串,服务端在字符串的前面加上hello 并返回。

嗯,服务器写完了。。。。。。吗?是不是应该注册一下。。。
差点忘了,现在我们去注册服务

  1. <service android:name=".MyAidlService"
  2. android:enabled="true"
  3. android:exported="true">
  4. <intent-filter>
  5. <action android:name="chenxiaomo"/>
  6. </intent-filter>
  7. </service>

客户端

工程名:KotlinAidlClient
为了保证包名一致,我们要先创建一个跟服务端Aidl所在一样的包,然后在这个包上点击右键创建文件,跟上面一样。
我先展示一下代码然后再分析说明

这里的ViewHolder是为了方便控件管理而自定义的类,里面声明一个Edittext用来输入内容,还有一个Button用来点击时发送消息。这个可以使用运行时注入实现,也可以使用编译时注解比如ButterKnife实现

接下来声明了一个我们的AIDL接口对象 service
在然后我们定义了一个服务连接对象conn,里面所做的操作是当与服务器连接成功后,连接服务器的AIDL接口
在然后的代码我就不说了,剩下就是启动服务,设置点击。最后我们可以在点击事件中去与服务端交互了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注