com.android.packageinstaller,Android包管理机制(二)PackageInstaller安装APK

前言

在本系列上一篇文章Android包管理机制(一)PackageInstaller的初始化中我们学习了PackageInstaller是如何初始化的,这一篇文章我们接着学习PackageInstaller是如何安装APK的。本系列文章的源码基于Android8.0。

1.PackageInstaller中的处理

紧接着上一篇的内容,在PackageInstallerActivity调用startInstallConfirm方法初始化安装确认界面后,这个安装确认界面就会呈现给用户,用户如果想要安装这个应用程序就会点击确定按钮,就会调用PackageInstallerActivity的onClick方法,如下所示。

packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java

public void onClick(View v) {

if (v == mOk) {

if (mOk.isEnabled()) {

if (mOkCanInstall || mScrollView == null) {

if (mSessionId != -1) {

mInstaller.setPermissionsResult(mSessionId, true);

finish();

} else {

startInstall();//1

}

} else {

mScrollView.pageScroll(View.FOCUS_DOWN);

}

}

} else if (v == mCancel) {

...

finish();

}

}

onClick方法中分别对确定和取消按钮做处理,主要查看对确定按钮的处理,注释1处调用了startInstall方法:

packages/apps/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java

private void startInstall() {

Intent newIntent = new Intent();

newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO,

mPkgInfo.applicationInfo);

newIntent.setData(mPackageURI);//1

newIntent.setClass(this, InstallInstalling.class);

String installerPackageName = getIntent().getStringExtra(

Intent.EXTRA_INSTALLER_PACKAGE_NAME);

if (mOriginatingURI != null) {

newIntent.putExtra(Intent.EXTRA_ORIGINATING_URI, mOriginatingURI);

}

...

if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI);

startActivity(newIntent);

finish();

}

startInstall方法用于跳转到InstallInstalling这个Activity,并关闭掉当前的PackageInstallerActivity。InstallInstalling主要用于向包管理器发送包的信息并处理包管理的回调。 InstallInstalling的onCreate方法如下所示。

packages/apps/PackageInstaller/src/com/android/packageinstaller/InstallInstalling.java

@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.getSche

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值