Android 9.0 自定义服务(二)

1 在服务中添加下载进度回调【也可以通过广播发送进度】

aidl 只能调用 aidl 类型

/frameworks/base/core/java/android/os/IMbtkNetworkService.aidl

    // Register callback
    void registerCallback(IDownloadProcessCallback callback);

    // Unregister callback
    void unregisterCallback(IDownloadProcessCallback callback);

1.2 添加aidl

/frameworks/base/core/java/android/os/IDownloadProcessCallback.aidl

package android.os;

interface IDownloadProcessCallback {

    void onProgress(long progress);// 用于通知当前的下载进度

    void onSuccess();// 用于通知下载成功事件

    void onFailed();// 法用于通知下载失败事件
}

1.3 添加到 Android.bp

java_library {
    name: "framework",

    srcs: [
        ...
        "core/java/android/os/IMbtkNetworkService.aidl",
        "core/java/android/os/IDownloadProcessCallback.aidl",
        ...

1.4 在服务端注册调用

frameworks/base/services/core/java/com/android/server/MbtkNetworkService.java

    @Override
    public boolean downLoadFile(String ftpFilePath, String downPath) throws RemoteException {
        boolean result = false;
        try {
            mFtpUtil.setCallback(mDownloadProcessCallback);
            result = mFtpUtil.downLoadFile(ftpFilePath, downPath);
        } catch (Exception e) {
            Log.d(TAG, "Error occurred while downLoadFile from ftp server.");
        }
        return result;
    }

    @Override
    public void registerCallback(IDownloadProcessCallback listener) throws RemoteException {
        if (listener != null) {
            mDownloadProcessCallback = listener;
        }
    }

    @Override
    public void unregisterCallback(IDownloadProcessCallback listener) throws RemoteException {
        if (listener != null) {
            mDownloadProcessCallback = null;
        }
    }

frameworks/base/services/core/java/com/android/server/FtpUtils.java

    ...
    public void setCallback(IDownloadProcessCallback callback) {
        mCallback = callback;
    }
    ...
                    localSize += c;
                    long nowProcess = localSize / step;
                    if (nowProcess > process) {
                        process = nowProcess;
                        android.util.Log.d(TAG, "downloaded nowProcess = " + nowProcess);
                        if (mCallback != null) {
                            mCallback.onProgress(nowProcess);
                        }
                    }

2 客户端注册

2.1 拷贝IDownloadProcessCallback.aidl

将IDownloadProcessCallback.aidl 从服务端拷贝到客户端的同名目录下

2.2 实现aidl

编写一个类实现 拷贝IDownloadProcessCallback.aidl

    class DownloadProcessCallbackImpl extends IDownloadProcessCallback.Stub {
        @Override
        public void onProgress(long process) throws RemoteException {
            Log.d(TAG, "===== 下载进度 : " + process);
        }

        @Override
        public void onSuccess() throws RemoteException {

        }

        @Override
        public void onFailed() throws RemoteException {

        }
    }

2.3 在客户端注册回调

因为时做成的一个系统服务,所以我们需要使用manager去调用

manager.registerCallback(new DownloadProcessCallbackImpl());

Android 9.0 自定义服务(三)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值