如何在Android Q上以编程方式安装.apk?

时间:2019-05-06 02:57:28

标签: android install apk

我正在开发一个应用程序,并且希望支持AndroidQ。并且我正在使用Android模拟器。 我已经在路径中下载了一个apk文件。

/storage/emulated/0/Android/data/<package-name>/files/download/xxxxxx.apk

我这样安装apk:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileprovider", new File(apkPath));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");        
startActivity(intent);

上面的代码在Android Q之前运行良好。 但是在Android Q上,我只能获取文件uri

content://<package-name>.fileprovider/my_downloads/xxxxxx.apk

,但是发送意图时不显示安装屏幕。 我需要别人的帮助。非常感谢!

1 个答案:

答案 0 :(得分:0)

问题与在Android O之后安装未知应用有关。 我应该使用权限:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

并在安装前检查权限:

getPackageManager().canRequestPackageInstalls()

如果已获得许可,则可以继续安装。除此以外, 我们应该发送意图以打开权限页面:

Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_INSTALL_PERMISSION);

我们可以在onActivityResult中处理结果。