- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.install_installing);
- ApplicationInfo appInfo = getIntent()
- .getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO);
- mPackageURI = getIntent().getData();
- if ("package".equals(mPackageURI.getScheme())) {
- try {
- getPackageManager().installExistingPackage(appInfo.packageName);
- launchSuccess();
- } catch (PackageManager.NameNotFoundException e) {
- launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
- }
- } else {
- // 根据 mPackageURI 创建一个对应的 File
- final File sourceFile = new File(mPackageURI.getPath());
PackageUtil.initSnippetForNewApp(this, PackageUtil.getAppSnippet(this, appInfo,
- sourceFile), R.id.app_snippet);
- // 如果 savedInstanceState 不为 null, 获取此前保存的 mSessionId 和 mInstallId
- if (savedInstanceState != null) {//1
- mSessionId = savedInstanceState.getInt(SESSION_ID);
- mInstallId = savedInstanceState.getInt(INSTALL_ID);
- // 向 InstallEventReceiver 注册一个观察者
- try {
- InstallEventReceiver.addObserver(this, mInstallId,
- this::launchFinishBasedOnResult);//2
- } catch (EventResultPersister.OutOfIdsException e) {
- }
- } else {
- PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
- PackageInstaller.SessionParams.MODE_FULL_INSTALL);//3
- params.referrerUri = getIntent().getParcelableExtra(Intent.EXTRA_REFERRER);
- params.originatingUri = getIntent()
- .getParcelableExtra(Intent.EXTRA_ORIGINATING_URI);
- params.originatingUid = getIntent().getIntExtra(Intent.EXTRA_ORIGINATING_UID,
- UID_UNKNOWN);
- File file = new File(mPackageURI.getPath());//4
- try {
- PackageParser.PackageLite pkg = PackageParser.parsePackageLite(file, 0);//5
- params.setAppPackageName(pkg.packageName);
- params.setInstallLocation(pkg.installLocation);
- params.setSize(
- PackageHelper.calculateInstalledSize(pkg, false, params.abiOverride));
- } catch (PackageParser.PackageParserException e) {
- ...
- }
- try {
- mInstallId = InstallEventReceiver
- .addObserver(this, EventResultPersister.GENERATE_NEW_ID,
- this::launchFinishBasedOnResult);//6
- } catch (EventResultPersister.OutOfIdsException e) {
- launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
- }
- try {
- mSessionId = getPackageManager().getPackageInstaller().createSession(params);//7
- } catch (IOException e) {
- launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
- }
- }
- ...
- mSessionCallback = new InstallSessionCallback();
- }
- }
来源: https://www.cnblogs.com/ganchuanpu/p/9313431.html