Ошибка при синтаксическом анализе пакета

Хочу обновлять приложение минуя play market и подобные.

Написал код, разрешил в системе установку из недостоверных источников, в том числе и для своего приложения.

Добавил в manifest

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

Запускаю установку вот так:

private void runInstallIntent() {
    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"app-release.apk");
    Uri data = FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID +".provider",file);
    Intent intent = new Intent(Intent.ACTION_VIEW,data);
    intent.setDataAndType(data,"application/vnd.android.package-archive");
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

Но выходит уведомление "Ошибка при синтаксическом анализе пакета", клавиша ок и более ничего.

Сначала я подумал что проблема в самом APK. Перепроверил, и даже по новой сделал подписанный APK файл, перезалил его на устройство, но результат остался прежним.

Нашел на устройстве стандартный проводник, через него зашел в папку Download запустил установку, и оно нормально обновилось!

Что я делаю не так?

P.S. Android 9, API 28

UPD. Приложение устанавливалось сразу через APK, в маркеты не заливалось. И успешно устанавливается/обновляется через встроенный проводник.

UPD2. Так и не понял, почему когда используется FileProvider не происходит установка/обновление.

Решил пока временно не использовать FileProvider, и чтобы не ловить исключение FileUriExposedException на API>24 применил следующий хак

try{
    Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
    m.invoke(null);
} catch(Exception e){
    e.printStackTrace();
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

Ответы (0 шт):