2016-11-11 2 views
2

У меня есть приложение, которое отлично работает на стандартных устройствах с разделом External storage или встроенной/внешней SD-картой. Но в последнее время я перешел на планшет Acer для тестирования, и все файловые операции на нем нарушены.Не удается получить доступ к общим папкам на внутренней памяти

Планшет имеет только Internal storage, на котором расположены стандартные общедоступные каталоги (Download, DCIM и т. Д.). У меня есть библиотека хранилища, которая проверяет, доступен ли External, если нет - настраивается на использование Internal. Тем не менее, я полностью не смог получить доступ к публичным каталогам с библиотекой или без нее. Вот мои впечатления:

  • Внешний раздел обнаружен, Environment.getExternalDirectory() вернуть некоторую общую папку, MEDIA_MOUNTED (чтение/запись) статус, но я не могу писать, читать, создавать реж вообще ничего (чтение/запись разрешения в Manifest.xml правильно установлены);/sdcard пуст при доступе из какого-либо места, а не из другого, некоторая магическая ссылка на вуду, я думаю ...

  • С другой стороны, когда я переключаюсь на использование Internal storage, я могу писать файлы только в приложение частная папка (com/myapp /.../ app_)/sdcard недоступна, хотя она и есть внутри, практически.

  • Пробовал использовать Intents и ContentResolvers, чтобы позволить ОС Android самостоятельно решить, как получить/предоставить доступ к данным и общедоступным серверам. Даже если бы это сработало, мне нужно было бы полностью переустановить мои FileUtils и FilePicker только из-за этого конкретного устройства (приложение работало правильно на нескольких планшетах, телефонах, эмуляторах ...)
  • adb shell от терминала дает мне прямой доступ к общедоступным справочникам; Android Device Monitor - нет;

Любое мнение оценивается. Благодарю.

+1

https://developer.android.com/training/permissions/requesting.html – 1615903

+0

Спасибо большое, 1615 ...! Это решило проблему. – speirs23

ответ

0

Перейдите по ссылкам ниже для более подробной информации:

https://developer.android.com/training/basics/data-storage/files.html https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

При сохранении файла внутренней памяти, вы можете приобрести соответствующий каталог в виде файла, вызвав один из двух методов:

  • getFilesDir()
  • getCacheDir()

Например:

File file = new File(context.getFilesDir(), filename); 

В качестве альтернативы, вы можете вызвать openFileOutput(), чтобы получить FileOutputStream, который записывает в файл во внутреннем каталоге. Например, вот как написать текст в файл:

String filename = "myfile"; 
String string = "Hello world!"; 
FileOutputStream outputStream; 

try { 
    outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
    outputStream.write(string.getBytes()); 
    outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

Спасибо, но я попробовал это. Он использует частные места приложения. И мне нужно иметь возможность создавать/читать/записывать файлы в общих папках (Download, DCIM). Что так происходит во внутреннем хранилище для данного устройства. – speirs23

Смежные вопросы