Сохранение в галерее устройства [дубликат]

Его можно обрабатывать с помощью функций синхронизации времени step-end и step-start

Например: https://jsfiddle.net/y72h8Lky/

$(".run").on("click", function() {
    $(".popup").addClass("show");
});
$(".popup").on("click", function() {
    $(".popup").removeClass("show");
})
.popup {
    opacity: 0;
    display: block;
    position: absolute;
    top: 100%;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 1450;
    background-color: rgba(0, 175, 236, 0.6);
    transition: opacity 0.3s ease-out, top 0.3s step-end;
}
.popup.show {
    transition: opacity 0.3s ease-out, top 0.3s step-start;
    opacity: 1;
    top: 0;
}


3
задан Bryan 19 October 2015 в 14:05
поделиться

2 ответа

Предполагается, что это будет сохранено в папке «Картинки»

getExternalStorageDirectory() возвращает корень внешнего хранилища, а не какое-либо местоположение внутри него (например, Pictures/ , DCIM/, Movies/).

Я также попробовал Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_PICTURES) с тем же результатом

Это даст вы соответствуете директории или независимо от того, что устройство считает правильным каталогом (обычно называемым Pictures/ во внешнем хранилище для любого текущего пользователя).

, но Environment.getExternalStorageDirectory (). getAbsolutePath ( ), похоже, создает новую файловую структуру, такую ​​как этот файл: // storage / emulated / 11 / Pictures /

11 немного необычен, а getAbsolutePath() ничего не возвращает с file://, но в противном случае это кажется правильным.

Но это не стандартная папка «Картинки» на любом из моих тестовых устройств или эмуляторов.

Я не знаю, как вы определили

Я хотел бы знать, есть ли способ сохранить эту папку, а также установить собственное имя файла.

Начать с вашего первый образец, переключившись на DIRECTORY_PICTURES. Затем:

  • имеют outputStream сообщение FileOutputStream
  • outputStream.getFD().sync() после flush() и перед close()
  • используют MediaScannerConnection и его scanFile(), чтобы MediaStore проиндексировать изображение, поэтому он доступен для галерей на устройстве, для файловых менеджеров настольных ОС и т. д.
3
ответ дан CommonsWare 26 August 2018 в 02:34
поделиться

С Android 6.0 Marshmallow (API> = 23) Google представила новую модель разрешения.

Вы должны запросить разрешение во время выполнения:

String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permissions, WRITE_REQUEST_CODE);

и обработать результат в onRequestPermissionsResult (),

File path = Environment.getExternalStoragePublicDirectory(
    Environment.DIRECTORY_PICTURES);
File file = new File(path, "db.JPG");
try {
    file.createNewFile();
}
catch (IOException e) {
    Toast.makeText(this.getApplicationContext(),
    "createNewFile:"+e.toString(),
    Toast.LENGTH_LONG).show();
}

, затем

if (Build.VERSION.SDK_INT < 19) {
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
    Uri.parse("file://" + filename)));
}
else {
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
    Uri.parse("file://" + filename)));
}

, чтобы показать в галерее.

0
ответ дан Alexander Lubyagin 26 August 2018 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: