实测kotlin实现时,明明类存在,但会出现unresolved reference
模式:一个App开启Service服务,一个App绑定服务进行交互。
要点:
Service App和Client App要使用同一份aidl文件,包名也必须相同。
如果不是用基础数据而是要使用序列化后的Data,Data的包名也必须相同。
/———————————————————————————
/———————————————————————————
##
Service App
创建Data序列化数据。
1 | package com.example.testaidl; |
右键点击项目,new->aidl,创建AIDl文件。
BookData.aidl
1 | package com.example.testaidl; |
创建Service类
1 | package com.example.testaidl; |
/--------------------------------------------------------------------------------- /---------------------------------------------------------------------------------
## Client App 拷贝aidl文件夹到app/src/main文件夹中,包名不变 创建Service App相同包名的Data类,拷贝代码。 **MainActivity** ```java package com.example.myapplication;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.testaidl.BookController;
import com.example.testaidl.BookData;
import java.util.ArrayList;
public class Main2Activity extends AppCompatActivity {
ArrayList
boolean connected = false;
BookController bookController = null;
final ServiceConnection serviceConnection = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
connected = true;
bookController = BookController.Stub.asInterface(iBinder);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
connected = false;
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindService();
findViewById(R.id.btnAdd).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
bookController.addBookInOut(new BookData("新书"));
}catch (Exception e){
}
}
});
findViewById(R.id.btnGet).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
bookList.clear();
bookList.addAll(bookController.getBookList());
for(BookData book : bookList){
Log.d("zql","书名:"+book.getName());
}
}catch (Exception e){
}
}
});
}
void bindService(){
Intent intent =new Intent();
intent.setPackage("com.example.testaidl");
intent.setAction("com.example.testaidl.action");
bindService(intent,serviceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
super.onDestroy();
if(connected){
unbindService(serviceConnection);
}
}
}