1.service端
1.main路径下新建aidl Directory。新建aidl文件
DNAidl.aidl
package com.fengzhisoft.demo1;
import com.fengzhisoft.demo1.Person;
// Declare any non-default types here with import statements
interface DNAidl {
void addPerson(in Person person);
List<Person> getPersonList();
}
Person.aidl
package com.fengzhisoft.demo1;
// Declare any non-default types here with import statements
parcelable Person;
2.java路径下添加DNAidlService,Person
DNAidlService
package com.fengzhisoft.demo1
import android.app.Service
import android.content.Intent
import android.os.IBinder
class DNAidlService : Service() {
private val personarraylist = mutableListOf<Person?>()
override fun onBind(intent: Intent?): IBinder? {
return iBinder
}
private val iBinder = object : DNAidl.Stub() {
override fun addPerson(person: Person?) {
personarraylist.plusAssign(person)
}
override fun getPersonList(): MutableList<Person?> {
return personarraylist
}
}
}
<service
android:name=".DNAidlService"
android:exported="true" />
Person
import android.os.Parcel
import android.os.Parcelable
data class Person(
var name: String?,
var gradle: Int
) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readInt()
) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(name)
parcel.writeInt(gradle)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Person> {
override fun createFromParcel(parcel: Parcel): Person {
return Person(parcel)
}
override fun newArray(size: Int): Array<Person?> {
return arrayOfNulls(size)
}
}
}
3.服务端app,MainActivity onCreate中启动service
startService(Intent(this, DNAidlService::class.java))
2.Client端
将服务端app的aidl文件夹粘贴至client端app的main路径下
client新建包名例如"demo1"。对应服务端包名。
服务端app的Person.java粘贴至client端app的"demo1"路径下
client端绑定服务
class MainActivity : AppCompatActivity() {
private var dnaidl: DNAidl? = null
private val conn by lazy {
object : ServiceConnection {
override fun onServiceDisconnected(name: ComponentName?) {
}
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
dnaidl = DNAidl.Stub.asInterface(service)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
intent.component =
ComponentName("com.fengzhisoft.demo1", "com.fengzhisoft.demo1.DNAidlService")
bindService(intent, conn, Context.BIND_AUTO_CREATE)
button.setOnClickListener {
dnaidl?.addPerson(Person("dn", 10))
dnaidl?.addPerson(Person("dn", 12))
val people = dnaidl?.personList
Toast.makeText(this, people.toString(), Toast.LENGTH_SHORT).show()
}
}
}