温习基础,防止遗忘,记录问题。
项目地址:码云
客户端app演示效果:
服务app
public class AIDLService extends Service {
MyBinder myBinder;
@Override
public void onCreate() {
super.onCreate();
myBinder = new MyBinder();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return myBinder;
}
public class MyBinder extends IMyAidlInterface.Stub {
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
}
@Override
public String getColor() throws RemoteException {
return "red";
}
@Override
public double getWeight() throws RemoteException {
return 333.3d;
}
@Override
public Book getBook() throws RemoteException {
Book book = new Book();
book.setName("Bobby's book");
book.setPrice(100);
return book;
}
}
}
Book实体类
public class Book implements Parcelable {
private String name;
private int price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.name);
dest.writeInt(this.price);
}
public Book() {
}
protected Book(Parcel in) {
this.name = in.readString();
this.price = in.readInt();
}
public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() {
@Override
public Book createFromParcel(Parcel source) {
return new Book(source);
}
@Override
public Book[] newArray(int size) {
return new Book[size];
}
};
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
Book.aidl 名字路径要与book.java一致不然会有各种问题
package com.bobbygu.bobbyapp.function.aidlSample;
parcelable Book;
IMyAidlInterface.aidl
interface IMyAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
String getColor();
double getWeight();
Book getBook();
}
aidl服务 Manifest配置
<service
android:name="com.bobbygu.bobbyapp.function.aidlSample.AIDLService"
android:enabled="true"
android:exported="true"
android:permission="com.bobbygu.permission.CONTENTPROVIDER">
<intent-filter>
<action android:name="com.bobby.aidl.BobbyService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
客户端app
public class AIDLActivity extends Activity {
//IMyAidlInterface所在文件目录必须与service程序中的文件目录一样
IMyAidlInterface iService;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
iService = IMyAidlInterface.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
iService = null;
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aidl);
}
public void getWeight(View view) {
if (iService == null) {
new SweetAlertDialog(AIDLActivity.this)
.setTitleText(getString(R.string.dialog_title))
.setContentText("iService=" + iService)
.show();
Logger.e("iService=" + iService);
} else {
try {
new SweetAlertDialog(AIDLActivity.this)
.setTitleText(getString(R.string.dialog_title))
.setContentText("iService.getWeight=" + iService.getWeight())
.show();
Logger.e("iService=" + iService.getWeight());
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void getColor(View view) {
if (iService == null) {
new SweetAlertDialog(AIDLActivity.this)
.setTitleText(getString(R.string.dialog_title))
.setContentText("iService=" + iService)
.show();
Logger.e("iService=" + iService);
} else {
try {
new SweetAlertDialog(AIDLActivity.this)
.setTitleText(getString(R.string.dialog_title))
.setContentText("iService.getColor=" + iService.getColor())
.show();
Logger.e("iService=" + iService.getWeight());
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
public void getBook(View view) {
if (iService == null) {
new SweetAlertDialog(AIDLActivity.this)
.setTitleText(getString(R.string.dialog_title))
.setContentText("iService=" + iService)
.show();
Logger.e("iService=" + iService);
} else {
try {
new SweetAlertDialog(AIDLActivity.this)
.setTitleText(getString(R.string.dialog_title))
.setContentText("iService.getBook=" + iService.getBook())
.show();
Logger.e("iService=" + iService.getWeight());
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
@Override
protected void onStart() {
super.onStart();
final Intent in = new Intent();
// in.setClassName(this, "com.bobbygu.bobbyapp.function.aidlSample.AIDLService");
in.setPackage("com.bobbygu.bobbyapp");
in.setAction("com.bobby.aidl.BobbyService");
boolean bindService = bindService(in, conn, Context.BIND_AUTO_CREATE);
Logger.e("bindService=" + bindService);
}
@Override
protected void onStop() {
super.onStop();
if (conn != null) {
unbindService(conn);
}
}
public static void startActivity(Activity activity) {
activity.startActivity(new Intent(activity, AIDLActivity.class));
}
}
manifest配置权限
<uses-permission android:name="com.bobbygu.permission.CONTENTPROVIDER"/>