Android: Asus Nexus 7 не сохраняет эмулируемую память до перезапуска

У меня очень конкретная проблема - я пытаюсь записать на внешнее хранилище на Asus Nexus 7, но он записывает в эмулируемый каталог на устройстве.

Вот код, который я использую:

public static void writeExternalMedia(Context context) {
    if(isExternalStorageWritable()) {
        String content = "hello world";

        File filedir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/test");
        filedir.mkdir();

        File file;

        FileOutputStream outputStream;

        try {
            file = new File(filedir, "test.txt");

            if (!file.exists()) {
                file.createNewFile();
            }

            outputStream = new FileOutputStream(file);
            outputStream.write(content.getBytes());
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

Всякий раз, когда я перезагружаю устройство, каталоги появляются под устройством при подключении к сети, чего я и ожидал, когда будет выполнена указанная выше функция.

Я попытался найти решение и не могу найти ответ на свой вопрос.


person eplewis89    schedule 23.06.2016    source источник
comment
Я почти уверен, что это то же самое: stackoverflow.com/questions/37946892/   -  person Budius    schedule 23.06.2016
comment
Я использовал эту методологию, но, к сожалению, она не сработала. Тем не менее, спасибо за усилия!   -  person eplewis89    schedule 23.06.2016


Ответы (2)


Я сделал два метода. Один для создания файла и один для добавления к нему. Я думаю, проблема в том, что вы не вызываете createNewFile.

private File CreateFile(String fileName)
{
    File file = new File(this.getFilesDir(), fileName);
    try
    {
        if(!file.exists())
        {
            file.createNewFile();
        }
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    return file;
}

private void appendToFile(String file, String content)
{
    try
    {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(this.openFileOutput(file, this.MODE_APPEND));
        outputStreamWriter.append(content + "\n");
        outputStreamWriter.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}
person Ali Reza Dehdar    schedule 23.06.2016
comment
Спасибо за попытку, но это не сработало. Каталог файлов, который я пытаюсь использовать, находится на внешнем хранилище. Фактический каталог, в который выполняется запись, отображается как / storage / emulated / 0 / Download / test. Когда я записываю файл в этот эмулированный каталог, который работает безупречно, файл не появляется, пока устройство не перезагрузится. - person eplewis89; 23.06.2016

Хорошо, после долгого поиска и тестирования я наконец нашел решение, связанное с одним из других ответов.

https://stackoverflow.com/a/28448843/979220

Решением было сканировать медиафайлы, в результате чего файлы распространялись на внешнее хранилище, а не оставались в эмулируемом хранилище.

person eplewis89    schedule 23.06.2016