Я пытаюсь заставить свое приложение автоматически устанавливать apk. Это отлично работает для API‹24. Но для 24 это провал. В Android реализована дополнительная безопасность:
Для приложений, ориентированных на Android 7.0, платформа Android применяет политику API StrictMode, которая запрещает раскрытие URI file:// за пределами вашего приложения. Если намерение, содержащее URI файла, покидает ваше приложение, приложение завершается с ошибкой FileUriExposedException.
Итак, я попробовал это:
Uri myuri;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
myuri = Uri.parse("file://"+outapk);
} else {
File o = new File(outapk);
myuri = FileProvider.getUriForFile(con, con.getApplicationContext().getPackageName() + ".provider", o);
}
Intent promptInstall = new Intent(Intent.ACTION_VIEW).setDataAndType(myuri,"application/vnd.android.package-archive");
con.startActivity(promptInstall);
но получить фатальное исключение:
com.android.packageinstaller "Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{b42ee8a 6826:com.android.packageinstaller/u0a15} (pid=6826, uid=10015) that is not exported from uid 10066".
У меня есть export=true в моем манифесте.
Похоже, проблема в том, что программа установки пакетов не может использовать uri content://.
Есть ли способы разрешить приложению программно устанавливать apk с помощью api24?