@cxm-2016
2016-08-16T11:32:49.000000Z
字数 1253
阅读 2784
android
no
话不多说,直接上步骤:
工程名:KotlinAidlService
这里需要提醒的是,一定要用在相应的包(这个包相当重要,建议创建一个独立的aidl包)上
点击 右键->New->AIDL->AIDL file 的方式创建文件,最好不要手动创建。这里我创建了一个名字为MyInterface的文件。
文件创建完成后就该修改文件了,这里添加了这样一个方法
interface MyInterface {
String getString(String info);
}
创建完成后我们点击编译(运行按钮左边的小锤子)
如果你有过Eclipse的AIDL开发经验的话会发现这里貌似找不到生成的接口文件!其实接口文件是有的,只不过隐藏的比较深。
我们不需要关心接口被放在哪了,只要能够正常的调用就行了。
现在我们创建一个Kotlin类MyAidlService并继承Service
然后我们重写其中的onBind方法,返回我们aidl接口的实现
class MyAidlService : Service() {
override fun onBind(intent: Intent?): IBinder = object : MyInterface.Stub() {
override fun getString(info: String?): String = "hello $info"
}
}
因为我们这里只是简单地测试,所以我的实现效果就是 客户端发送一个字符串,服务端在字符串的前面加上hello 并返回。
嗯,服务器写完了。。。。。。吗?是不是应该注册一下。。。
差点忘了,现在我们去注册服务
<service android:name=".MyAidlService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="chenxiaomo"/>
</intent-filter>
</service>
工程名:KotlinAidlClient
为了保证包名一致
,我们要先创建一个跟服务端Aidl所在一样的包,然后在这个包上点击右键创建文件,跟上面一样。
我先展示一下代码然后再分析说明
这里的ViewHolder是为了方便控件管理而自定义的类,里面声明一个Edittext用来输入内容,还有一个Button用来点击时发送消息。这个可以使用运行时注入实现,也可以使用编译时注解比如ButterKnife实现
接下来声明了一个我们的AIDL接口对象 service
在然后我们定义了一个服务连接对象conn,里面所做的操作是当与服务器连接成功后,连接服务器的AIDL接口
在然后的代码我就不说了,剩下就是启动服务,设置点击。最后我们可以在点击事件中去与服务端交互了。