Skip to content

解决使用默认的UpdateDialogFragment在初次安装应用时候,因为DownloadService没有能使用activity.s… - #66

Merged
WVector merged 1 commit into
WVector:masterfrom
Jiiiiiin:feature/handler_download_service_on_resp_can_not_use_start_activity_for_result
Apr 5, 2018
Merged

解决使用默认的UpdateDialogFragment在初次安装应用时候,因为DownloadService没有能使用activity.s…#66
WVector merged 1 commit into
WVector:masterfrom
Jiiiiiin:feature/handler_download_service_on_resp_can_not_use_start_activity_for_result

Conversation

@Jiiiiiin

Copy link
Copy Markdown
Contributor

解决使用默认的UpdateDialogFragment在初 次安装应用时候,因为DownloadService没有能使用activity.startActivityForResult启动安装界面,导致用户如果取消安装,插件使用者得不到通知的问题:

privatevoidstartDownload(UpdateAppBeanupdateApp, finalDownloadCallbackcallback) {
mDismissNotificationProgress = updateApp.isDismissNotificationProgress();
StringapkUrl = updateApp.getApkFileUrl();
if (TextUtils.isEmpty(apkUrl)) {
StringcontentText = "新版本下载路径错误";
stop(contentText);
return;
}
StringappName = AppUpdateUtils.getApkName(updateApp);
FileappDir = newFile(updateApp.getTargetPath());
if (!appDir.exists()) {
appDir.mkdirs();
}
Stringtarget = appDir + File.separator + updateApp.getNewVersion();
updateApp.getHttpManager().download(apkUrl, target, appName, newFileDownloadCallBack(callback));
}
privatevoidstop(StringcontentText) {
if (mBuilder != null) {
mBuilder.setContentTitle(AppUpdateUtils.getAppName(DownloadService.this)).setContentText(contentText);
Notificationnotification = mBuilder.build();
notification.flags = Notification.FLAG_AUTO_CANCEL;
mNotificationManager.notify(NOTIFY_ID, notification);
}
close();
}
privatevoidclose() {
stopSelf();
isRunning = false;
}
/** * 进度条回调接口 */publicinterfaceDownloadCallback {
// 新增下面的回调口子/** * 当应用处于前台,准备执行安装程序时候的回调, * * @param file * @return */booleanonInstallAppAndAppOnForeground(Filefile);
}

在初次应用下载完毕:

@OverridepublicvoidonResponse(Filefile) {
if (mCallBack != null) {
if (!mCallBack.onFinish(file)) {
close();
return;
}
}
try {
if (AppUpdateUtils.isAppOnForeground(DownloadService.this) || mBuilder == null) {
//App前台运行mNotificationManager.cancel(NOTIFY_ID);
**// 给应用开发者相应的权限去控制,是否自己处理**booleantemp = mCallBack.onInstallAppAndAppOnForeground(file);
if (!temp) {
AppUpdateUtils.installApp(DownloadService.this, file);
}

比如,在默认的UpdateDialogFragment中:

/** * 回调监听下载 */privatevoidstartDownloadApp(DownloadService.DownloadBinderbinder) {
// 开始下载,监听下载进度,可以用对话框显示if (mUpdateApp != null) {
binder.start(mUpdateApp, newDownloadService.DownloadCallback() {
//....
**@OverridepublicbooleanonInstallAppAndAppOnForeground(Filefile) {
// 如果应用处于前台,那么就自行处理应用安装AppUpdateUtils.installApp(UpdateDialogFragment.this.getActivity(), file);
dismiss();
returntrue;
}**
});
}
}

这样插件使用者就能得到用户取消安装应用的通知:

@OverridepublicvoidonActivityResult(intrequestCode, intresultCode, Intentdata) {
switch (resultCode) {
caseActivity.RESULT_OK:
break;
**caseActivity.DEFAULT_KEYS_DIALER:
switch (requestCode){
// 得到通过UpdateDialogFragment默认dialog方式安装,用户取消安装的回调通知,以便用户自己去判断,比如这个更新如果是强制的,但是用户下载之后取消了,在这里发起相应的操作caseAppUpdateUtils.REQ_CODE_INSTALL_APP:
Toast.makeText(this,"用户取消了安装包的更新", Toast.LENGTH_LONG).show();
break;
}
break;**
caseActivity.RESULT_CANCELED:
break;
default:
}
}

…tartActivityForResult启动安装界面,导致用户如果取消安装,插件使用者得不到通知的问题
@WVector
WVector merged commit 3ec2793 into WVector:masterApr 5, 2018
@Jiiiiiin

Copy link
Copy Markdown
ContributorAuthor

(*°∀°)=3

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jiiiiiin@WVector