A.apk 使用aidl调用B.apk的Service的函数
B.apk
package="com.eddy.android.aidlcall"
新建一个IRemoteService.aidl文件
package com.eddy.android.aidlcall;
interface IRemoteService
{
void manualUpdate(String location);
void cancelUpdate();
}
新建一个RemoteService.class文件
public class RemoteService extends Service {
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
private final IBinder mBinder = new ServiceStub(this);
static class ServiceStub extends IRemoteService.Stub{
WeakReference<RemoteService> mService;
public ServiceStub(RemoteService service) {
mService = new WeakReference<RemoteService>(service);
}
public void cancelUpdateWeather() throws RemoteException {
.... //做你想做的。
}
public void manualUpdateWeather(String location) throws RemoteException {
...... //做你想做的。
}
}
}
在Android.mk
LOCAL_SRC_FILES := $(call all-java-files-under, src) /
src/com/eddy/android/aidlcall/IWeatherRemoteService.aidl
在AndroidManifest.xml
<service android:name="RemoteService">
<intent-filter>
<action android:name="android.intent.action.WEATHER_SERVICE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
A.apk
使用B.apk的Service的函数。
在Activity中
private IRemoteService mService = null;
protected void onCreate(Bundle savedInstanceState){
bindService(new Intent("android.intent.action.WEATHER_SERVICE"), mServiceConn, Context.BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
unbindService(mServiceConn);// 取消service邦定
super.onDestroy();
}
private void method(){
mService.cancelUpdateWeather(); //--调用B.apk中的函数
mService.manualUpdateWeather(null); //--调用B.apk中的函数
}
private ServiceConnection mServiceConn = new ServiceConnection(){
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IWeatherRemoteService.Stub.asInterface(service);
}
public void onServiceDisconnected(ComponentName name) {
//mService = null;
//关闭service.
}
};
注意:
将B.apk的IRemoteService.aidl文件生成的IRemoteService.java文件拷到a.apk的package下。
A.apk 使用aidl调用B.apk的Service的函数
最新推荐文章于 2022-01-13 14:43:14 发布