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

标签 android installation apk

我正在开发一款应用并希望支持 Android Q。我正在使用 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

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

最佳答案

问题是关于在 Android O 之后安装未知应用程序。 我应该使用权限:

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

并在安装前检查权限:

getPackageManager().canRequestPackageInstalls()

如果已经授予权限,就可以继续安装了。否则, 我们应该发送打开权限页面的 Intent :

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

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

关于android - 如何在 Android Q 上以编程方式安装 .apk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998268/

相关文章:

windows-installer - 使用更新安装程序 MSP 删除文件

Android Studio 4.2 开始在发布版本中重命名 APK 内的资源

android - 在自定义 Ant 构建步骤中更改应用程序包名称

android - 如何在 Firebase 中重新验证用户身份

installation - 如何使用 Inno Setup 处理 .msi 文件?

java - API 19 : android. view.InflateException:二进制 XML 文件行 #0:膨胀类 SeekBar 时出错

python - 安装 Twitter Python 模块

android - 尝试使用 jarsigner.exe 手动签署 android 包并使用 adb.exe 安装

android - IntentService 可以无限期运行吗?

android - 移动设备(Android、iOS、Windows Phone)上的 TensorFlow