Ошибка при синтаксическом анализе пакета
Хочу обновлять приложение минуя 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");