2016-12-28 4 views
0

Я пытаюсь написать приложение для Android, и мне нужно сохранить Resposne с сервера, мне удалось это сделать, сохранив его в txt-файле по этому пути:Правильный путь для сохранения файла в Android

String path= "/storage/emulated/0/Android/data/com.example.simone.pizzino/files/response.txt"; final File file = new File(path);

тестирование его на телефон моего друга, он не может видеть папку на этом пути, путь его что-то вроде data/data/"packageName", он не работает на эмуляторе в Android Studio либо. Мой телефон Nexus 5X работает 7.1. Мой друг внедрен с использованием 6.1. Есть ли способ получить динамический путь к папке приложения без необходимости указывать его как константу?

Извините, если этот вопрос уже задан, но я не нашел решение проблемы.

+0

Я не уверен, что вы считаете «папкой приложения». Ваш hardcoded путь наиболее близко напоминает выход 'getExtenalFilesDir (null)', вызываемый в 'Context' (например,' Activity' или 'Service'). Помимо этого, пожалуйста, объясните ** подробно **, что означает «это не работает». – CommonsWare

+0

Я не понимаю, почему вы используете жесткий путь? вы можете просто сохранить файл во внутреннем хранилище https://developer.android.com/training/basics/data-storage/files.html – petrumo

+0

Каталог его приложения отличается от моего, его что-то вроде данных/данных/имя пакета. Приложение не может сохранить файл в этом месте, так как он не может найти его. – Facosenpai

ответ

3

Первое НУ нужно сделать, это добавить разрешение на доступ к внешней памяти в вашем файле манифеста

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Сохранение файла внутренней памяти

File file = new File(context.getFilesDir(), filename); 
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(); 
} 

public File getTempFile(Context context, String url) { 
    File file; 
try { 
    String fileName = Uri.parse(url).getLastPathSegment(); 
    file = File.createTempFile(fileName, null, context.getCacheDir()); 
} catch (IOException e) { 
    // Error while creating file 
} 
return file; 
} 

сохранить файл на внешнем хранилище

/* Checks if external storage is available for read and write */ 
public boolean isExternalStorageWritable() { 
String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_MOUNTED.equals(state)) { 
    return true; 
} 
return false; 
} 

/* Checks if external storage is available to at least read */ 
public boolean isExternalStorageReadable() { 
String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_MOUNTED.equals(state) || 
    Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
    return true; 
} 
return false; 
} 

public File getAlbumStorageDir(String albumName) { 
// Get the directory for the user's public pictures directory. 
File file = new File(Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES), albumName); 
if (!file.mkdirs()) { 
    Log.e(LOG_TAG, "Directory not created"); 
} 
return file; 
} 
+0

На Android 6 и новая модель разрешений изменилась. –