Ответ 1
Чтобы получить доступ к локальным файлам на устройствах Android, работающих с marshmellow или выше, вам необходимо проверить разрешение во время выполнения, прежде чем пытаться получить доступ к файлу. Если вы этого не сделаете, он сломается
Вот учебник, в котором он реализован, в частности, чтение файлов https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/
В зависимости от источника файла я бы рекомендовал вам не проверять перед игрой, а проверять перед точкой входа. Например, если вы пытаетесь выбрать носитель из галереи или файл из диспетчера файлов, как раз перед тем, как вы создадите сборщик заданий для файла, вы проверите разрешение на запись, затем выполните действия, показанные ниже.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == EXTERNAL_STORAGE_PERMISSION_CONSTANT) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//The External Storage Write Permission is granted to you... Continue your left job...
proceedAfterPermission();
} else {
//request again for permission or assume permission denied and alert the user
}
}
}
Вы все равно должны изучить ссылку, ее довольно легко реализовать. Надеюсь, вы найдете это полезное