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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值