Tout d'abord, la première question :
Après Android 7.0, une erreur est signalée lors de l'ouverture du fichier :
Deuxièmement, la deuxième question, sur Android 9.0, lorsque l'intention est ouverte, elle clignote, mais elle ne peut pas être ouverte, il suffit d'ajouter des autorisations
<!--适应android 9.0 调用安装app-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
Enfin, l'erreur d'analyse du package rencontrée par Android dans la version 9.0, veuillez consulter le code :
未修改之前代码:
public static void installUPTSMServiceApk(final Activity activity) {
File downNewAppFile = new File(Environment.getExternalStorageDirectory().getPath() + "/GDDownload", "UPTSMSeraviceApk.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= 24) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".fileProvider", downNewAppFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(downNewAppFile), "application/vnd.android.package-archive");
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(intent);
}
修改之后代码:
public static void installUPTSMServiceApk(final Activity activity) {
// 启用安装新线程
File downNewAppFile = new File(Environment.getExternalStorageDirectory().getPath() + "/GDDownload", "UPTSMSeraviceApk.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 24) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".fileProvider", downNewAppFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
intent.setDataAndType(Uri.fromFile(downNewAppFile), "application/vnd.android.package-archive");
}
activity.startActivity(intent);
}
Si vous regardez attentivement le code, vous verrez quelques indices. Peu importe si vous n'avez pas le temps de le lire. En fait, le plus important est de mettre
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mettre dedans,
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Devant , les raisons spécifiques ne seront pas décrites en détail, et les étudiants intéressés pourront s'y référer par eux-mêmes.