как всегда хранить приложение на SD-карте/внешней памяти

Я делаю одно приложение для Android, для которого хочу сохранить загруженные изображения на SD-карту или внешнее хранилище. Проблема, с которой я столкнулся, заключается в том, что на некоторых телефонах изображения хранятся на SD-карте, тогда как на некоторых телефонах они хранятся во внутренней памяти, особенно в устройствах Samsung, таких как Galaxy S4. Пожалуйста, смотрите прикрепленные изображения для пути к файлу в S4.

File wallpaperDirectory = new File(
                    Environment.getExternalStorageDirectory()
                            + "/TestApp/");
            wallpaperDirectory.mkdirs();
            FileOutputStream out = new FileOutputStream(Environment
                    .getExternalStorageDirectory().toString()
                    + "/TestApp/" + secret + ".jpg");
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            Toast.makeText(
                    getApplicationContext(),
                    "Wallpaper saved sucessfully \n"
                            + Environment.getExternalStorageDirectory()
                                    .toString() + "/TestApp/" + secret
                            + ".jpg", Toast.LENGTH_SHORT).show();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://"
                            + Environment.getExternalStorageDirectory())));

хранилище на s4


person android_newbie    schedule 20.09.2013    source источник
comment
Это связано с тем, что на таких устройствах, как Nexus 7 и Samsung Galaxy S4 Google Edition, нет внешних карт. Они подражали им. Таким образом, система предназначена для хранения его в поддельном внешнем месте.   -  person Jay Snayder    schedule 20.09.2013
comment
@JaySnayder: Не совсем так. Внешний != съемный.   -  person CommonsWare    schedule 20.09.2013
comment
Короче говоря, нет. Вы не можете сделать это каким-либо способом, поддерживаемым API.   -  person Geobits    schedule 20.09.2013
comment
@CommonsWare Нет, это не означает, что он может быть съемным, но это означает, что он находится в другом месте, отличном от внутреннего местоположения приложения. Вы не пишете о своем местоположении приложения там, чтобы внутренне. Вы пишете на внешний.   -  person Jay Snayder    schedule 20.09.2013
comment
Значит ли это, что с кодом проблем нет?   -  person android_newbie    schedule 20.09.2013
comment
@android_newbie Да, и, конечно же, CommonsWare объяснила это красиво и ясно ниже с дополнительным помощником.   -  person Jay Snayder    schedule 20.09.2013


Ответы (1)


Я делаю одно приложение для Android, для которого хочу сохранить загруженные изображения на SD-карту или внешнее хранилище.

Android SDK предлагает доступ к внешнему хранилищу. Будет ли это «sdcard» или что-то еще, решать производителю устройства.

Проблема, с которой я столкнулся, заключается в том, что на некоторых телефонах изображения хранятся на SD-карте, тогда как на некоторых телефонах они хранятся во внутренней памяти, особенно в устройствах Samsung, таких как Galaxy S4.

Этот код сохраняет изображения во внешнем хранилище. Он не хранит их во внутренней памяти. Является ли внешнее хранилище съемным или нет, зависит от производителя устройства.

Вы можете прочитать документацию о внешнем хранилище. .

Вы также должны:

  • Не использовать конкатенацию строк для создания объектов File. Используйте правильный конструктор File.

  • Храните ваши данные где-нибудь лучше, чем в жестко заданном каталоге TestApp вне корня внешнего хранилища, например getExternalFilesDir() или getExternalCacheDir(). Ваш подход годами считался дурным тоном, так как он загромождает внешнее хранилище пользователя.

  • Используйте более сфокусированный подход для обновления MediaStore, например, используя MediaScannerConnection и scanFile(), а не отправляйте широковещательную рассылку операционной системы, как если бы вы были операционной системой.

  • Обязательно выполняйте всю эту работу в фоновом потоке (из фрагмента кода неясно, являетесь ли вы им или нет).

person CommonsWare    schedule 20.09.2013
comment
Спасибо за такое хорошее объяснение. Это мои самые первые дни с разработками для Android. Я буду иметь в виду то, что вы указали - person android_newbie; 20.09.2013