A.apk 使用aidl调用B.apk的Service的函数

    技术2022-05-19  18

    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下。


    最新回复(0)