при нажатии на уведомление о завершении загрузки отображается тост «Не удается открыть файл»? - PullRequest
0 голосов
/ 01 июня 2019

Сначала в своем приложении я позволил приложению 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>

1 Ответ

0 голосов
/ 01 июня 2019

Скорее всего, это связано с тем, как Android 7.0 обрабатывает разрешения по сравнению с 6.0.Вы должны запросить разрешения другим способом, чем Android 7.0.Попробуйте повозиться с методом ContextCompat.checkSelfPermission ().Сообщение будет показано, потому что этот метод не запрашивает разрешение на открытие файла.Вот небольшой фрагмент, который поможет вам выбрать правильный путь:

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {

      ActivityCompat.requestPermissions(thisActivity,
              new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
              YourRequestCode);
}

Здесь этот вид деятельности - ваша текущая активность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...