为下载服务添加回调
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());