android - 无法启动 APK 文件以便用户安装它,Android 9 及更高版本?
问题描述
我使用此代码在操作系统下载 APK 文件后启动它:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setData(uri);
intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else {
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
它适用于 Android 8 及更低版本。但在 Android 9 和 10 上它不起作用。我找不到任何说明问题的日志。该代码也会执行到最后,并且不会出现警告/错误日志!但也没有启动安装对话框!
该项目targetSdkVersion
是 28。这是我的项目级 Gradle 文件:
buildscript {
repositories {
google()
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
classpath 'com.google.gms:google-services:4.3.2'
classpath 'io.fabric.tools:gradle:1.31.0' // Crashlytics plugin
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.2"
}
}
allprojects {
repositories {
google()
jcenter()
maven {
url "https://jitpack.io"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
解决方案
所以经过大量搜索,我终于找到了问题所在。对于 android 9 以后的版本,我们需要额外的AndroidManifest.xml
.
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
对于早期版本的 Android,这并不是真正需要的。无论如何添加权限后,API级别> = 28的问题得到解决。
推荐阅读
- vba - 将具有连接部分的公式写入单元格
- javascript - Gmail API 多个帐户
- calendar - 鉴于 ics VALARM 属性未出现在 Google 日历或 Outlook 中
- php - 获取 Woocommerce 产品类别图片网址
- angular - 如何禁用 Angular 材质扩展面板动画?
- python - 如何检查python中字符串中单词之前的字符是什么
- jmeter - Jmeter断言结果监听器作为变量
- java - 我想显示设备中的消息总数
- java - Lucene + 经典查询搜索语法是否与使用 AND 相同
- mysql - MySQL:连续日期之间的累计秒数