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

标签(空格分隔): android



  • Android Studio中使用Kotlin语言实现AIDL通信图文
  • 服务端
  • 创建AIDL文件
  • 创建服务
  • 客户端


话不多说,直接上步骤:

服务端

工程名:KotlinAidlService

创建AIDL文件

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

android studio 语言设置没java android studio改语言_kotlin


点击 右键->New->AIDL->AIDL file 的方式创建文件,最好不要手动创建。这里我创建了一个名字为MyInterface的文件。

文件创建完成后就该修改文件了,这里添加了这样一个方法

interface MyInterface {
    String getString(String info);
}

android studio 语言设置没java android studio改语言_aidl_02


创建完成后我们点击编译(运行按钮左边的小锤子)

如果你有过Eclipse的AIDL开发经验的话会发现这里貌似找不到生成的接口文件!其实接口文件是有的,只不过隐藏的比较深。

android studio 语言设置没java android studio改语言_aidl_03


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

创建服务

现在我们创建一个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"
    }
}

android studio 语言设置没java android studio改语言_aidl_04


因为我们这里只是简单地测试,所以我的实现效果就是 客户端发送一个字符串,服务端在字符串的前面加上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接口
在然后的代码我就不说了,剩下就是启动服务,设置点击。最后我们可以在点击事件中去与服务端交互了。