Сначала в своем приложении я позволил приложению system downloader загрузить APK для меня. Затем я использую этот код для установки apk-файла, загруженного менеджером загрузки Android по умолчанию:
if (getFileId() == downloadId) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/" + getFileName());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(apkUri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else {
Uri apkUri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
Этот код запускается автоматически после завершения загрузки и вызова получателя загрузки. И это хорошо работает. Проблема в том, что если пользователь нажимает на уведомление, сделанное системным диспетчером загрузки по умолчанию (уведомление о завершении загрузки), в API> = 23 я получаю сообщение «Не удается открыть файл», что очень раздражает (по любой причине пользователь может захотеть нажмите на уведомление). Я хочу, чтобы пользователи могли устанавливать apk-файл, когда нажимали на уведомление, которое уже работает при api <23. Как я могу решить эту проблему? </p>