Сделать изображение Файл доступен в галерее Android на Lollipop

Я пытаюсь сделать некоторые снимки, сделанные в приложении, видимом в Галерее (чтобы их можно было обменивать и просматривать вне приложения), но я хочу, чтобы изображения были сами в каталоге данных приложения, поэтому, когда Приложение удалено, они удаляются (поэтому они хранятся в «{sdcard} / Android / data / {appID} / Pictures / {подпапка} /" ).

Я рассмотрел множество ответов, а для более старых версий Android работают обе следующие решения, но они, похоже, не работают в Lollipop:

MediaScannerConnection.scanFile(this, new String[]{file.toString()}, new String[] { "image/jpeg" }, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); Uri contentUri = Uri.fromFile(file); Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,contentUri); sendBroadcast(mediaScanIntent); 

Я протестировал это в Nexus 4 (Android 5.0.1) и Nexus 6 (Android 5.1), и он не работает. В Nexus 7 (Android 4.2.2) он работает. Все 3 устройства имеют файл «.onmedia» в папке {sdcard} / Android / data / , поэтому обычное сканирование носителей не должно забирать их …

Кто-нибудь знает, как работать, чтобы работать на всех устройствах / версиях Android? Должно ли это из-за того, что файл noMedia не работает в первую очередь, и является ли Lollipop единственной версией, которая делает это правильно?

Изменить: обратите внимание, что даже перезапуск телефона (который также должен запускать повторное сканирование файлов) не работает. И не зря, потому что файлы находятся во вложенной папке каталога «.nomedia» … Поэтому любое решение, содержащее радиопередачу MEDIA_MOUNTED, выглядит бесполезным.

Попробуйте под кодом. Это работает для меня в Lollipop , Надежда работает и для вас

 ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA,"file path"); values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg"); mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values); 

EDIT: Не забудьте добавить это в свой манифест (хотя в Lollipop больше не нужно):

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

Я бы предложил вам взглянуть на мой ответ здесь . Он завершает все выводы вокруг MediaScanner которые я сделал.

Боковое замечание: все проблемы KitKat похоже, торчат на Lollipop .

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

Чтобы узнать, возможно ли, вы можете попытаться поместить ссылки на ваши локальные изображения в базу данных мультимедиа андроидов самостоятельно через

  mMediaProvider = mContext.getContentResolver().acquireProvider("media"); mImagesUri = Images.Media.getContentUri(volumeName); result = mMediaProvider.insert(mImagesUri, values); 

Вот исходный код медиаплеера, который должен содержать все необходимые фрагменты кода, как заполнять значения из jpg

После сохранения вызова изображения метод сканирования для сканирования галереи отобразит изображения в галерее.

  scanFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/appfolder/imgname"+imagenumber+".png"); private void scanFile(String file) { MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); } 

Поскольку вы сказали, что папка {sdcard} / Android / data / содержит файл .nomedia, мы можем отправить широковещательную MediaScanner для MediaScanner для сканирования подпапок папки, содержащей файл .nomedia, указав этот путь вложенной папки, используя следующий код ,

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file:// "+"Directory path"))); 
Intereting Posts
Как создать диагональную границу в React Native? Как создается контекст в Android? Какова цель ContextThemeWrapper? Ограничение API для распознавания речи Google Android Передача перечислений через вспомогательные интерфейсы Как определить, может ли Android обрабатывать PDF Странная ошибка с момента обновления до Android 4.2.2 – Произошла активность IntentReceiver ContentProvider insert () всегда работает в потоке пользовательского интерфейса? Не нашел класс «com.google.firebase.provider.FirebaseInitProvider»? Проблема при использовании отпечатка пальца Android: IV требуется при расшифровке. Используйте IvParameterSpec или AlgorithmParameters для его предоставления. Flag Activity Clear Top уничтожает целевую активность, а не создает ее Переход от Gson к Jackson для разбора JSON Создайте изогнутую линию формы L с динамическими данными Утилита Android Android Transaction rollback? Ошибка загрузки приложения разработчика PhoneGap Uncaught ReferenceError, вызов функции javascript через приложение для Android ..?