@historydev
Острая аллергия на анимешников

Как получить разрешение на запись файлов в android?

Я пробую собрать программу под андроид, в ней есть кусок работы с файловой системой:
//go:embed gopher.png
var imgBody []byte

f, err := os.CreateTemp("", "*.png")
	defer func() {
		_ = os.Remove(f.Name())
	}()

	_, err = io.Copy(f, bytes.NewReader(imgBody))
	defer f.Close()


Я погулил, пишут что с андроид 10+ не работает выдача разрешений и какой-то requestLegacyExternalStorage.

Предлагают делать так:
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29"
tools:ignore="ScopedStorage" />

Я попробовал и с maxSdk и без, толку нет. Цель 30-33, как мне получить это разрешение или что использовать? Я в java 0.

Вот часть ошибки, ниже повторы в местах где используется переменная:
E/Go: go.Universe$proxyerror: runtime error: invalid memory address or nil pointer dereference
goroutine 11 [running]:
runtime/debug.Stack()
C:/Program Files/Go/src/runtime/debug/stack.go:24 +0x8e
github.com/hajimehoshi/ebiten/v2/internal/ui.(*userInterfaceImpl).run.func1()
C:/Users/Vladimir/AppData/Local/Temp/gomobile-work-3204208703/pkg/mod/github.com/hajimehoshi/ebiten/v2@v2.4.15/internal/ui/ui_mobile.go:270 +0x4e
panic({0xc1dfdc00, 0xc1fdc548})
C:/Program Files/Go/src/runtime/panic.go:890 +0x265
os.(*File).Name(...)


os.(*File).Name(...) === f.Name()

Вот по этому моменту я понял что проблема в доступе к файловой системе
  • Вопрос задан
  • 316 просмотров
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
А зачем Вам доступ ко всей файловой системе ?
По коду как я понимаю Вам нужно временный файл создать !
Не пишу на GO . Поэтому поясню как там это работает.
Есть абстрактный класс Context (активити и еще 50+ его реализуют). В нем метод getCacheDir()
И есть java.io.File.createTempFile() где 3-м аргументом указываешь эту временную папку
Ни какие читаемые пути и имена файлов тут не нужны. Работаешь с java.io.File и Stream
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы