栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 9.0 自定义服务(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 9.0 自定义服务(二)

为下载服务添加回调
    • 1 在服务中添加下载进度回调【也可以通过广播发送进度】
      • 1.2 添加aidl
      • 1.3 添加到 Android.bp
      • 1.4 在服务端注册调用
    • 2 客户端注册
      • 2.1 拷贝IDownloadProcessCallback.aidl
      • 2.2 实现aidl
      • 2.3 在客户端注册回调

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 自定义服务(三)

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016471.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号