add to home screen、Google play下载应用launcher显示下载进度图标

这两种图标的添加都会走AddWorkspaceItemsTask.java,打断点就可以跟踪流程的发起和图标更新。

联系人中点击菜单可以添加快捷方式到桌面
Google play下载应用桌面显示下载进度图标

0、注册监听
LauncherAppState.java

InstallSessionTracker installSessionTracker =
                InstallSessionHelper.INSTANCE.get(context).registerInstallTracker(mModel);

InstallSessionHelper.java

    public InstallSessionTracker registerInstallTracker(InstallSessionTracker.Callback callback) {
    	//创建跟踪器
        InstallSessionTracker tracker = new InstallSessionTracker(this, callback);

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            mInstaller.registerSessionCallback(tracker, MODEL_EXECUTOR.getHandler());
        } else {
        	//注册应用安装回调,当系统安装应用时会回调注册的tracker
            mLauncherApps.registerPackageInstallerSessionCallback(MODEL_EXECUTOR, tracker);
        }
        return tracker;
    }

1、创建图标
InstallSessionTracker.java

	@Override
    public void onCreated(int sessionId) {
    	//根据系统回调的sessionId获取sessionInfo 
        SessionInfo sessionInfo = pushSessionDisplayToLauncher(sessionId);
        if (sessionInfo != null) {
            mCallback.onInstallSessionCreated(PackageInstallInfo.fromInstallingState(sessionInfo));
        }
        //创建图标
        mInstallerCompat.tryQueuePromiseAppIcon(sessionInfo);
    }

2、更新进度
InstallSessionTracker.java

//系统回调更新图标进度
public void onProgressChanged(int sessionId, float progress) {
        SessionInfo session = mInstallerCompat.getVerifiedSessionInfo(sessionId);
        if (session != null && session.getAppPackageName() != null) {
            mCallback.onPackageStateChanged(PackageInstallInfo.fromInstallingState(session));
        }
    }

PackageInstallStateChangedTask.java

...
//更新下载进度的数据
List<AppInfo> updatedAppInfos = apps.updatePromiseInstallInfo(mInstallInfo);
...
//更新界面
if (!updates.isEmpty()) {
                scheduleCallbackTask(callbacks -> callbacks.bindRestoreItemsChange(updates));
            }

BubbleTextView.java

//更新进度绘制图标
public PreloadIconDrawable applyProgressLevel() {
	...
	preloadIconDrawable.setLevel(progressLevel);
	...
}

3、下载完成
InstallSessionTracker.java

public void onFinished(int sessionId, boolean success) {
...
            mCallback.onPackageStateChanged(info);

            if (!success && mInstallerCompat.promiseIconAddedForId(sessionId)) {
                mCallback.onSessionFailure(packageName, key.mUser);
                // If it is successful, the id is removed in the the package added flow.
                mInstallerCompat.removePromiseIconId(sessionId);
            }
...
}

下载进度简单记录到这。后续遇到问题再详细跟进~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值