Удалить снимок изображения из галереи, когда он скрыт

Этот вопрос задан раньше (не так, как это), но пока еще не было ответа All Exclusive. Поэтому мы пытаемся найти лучшее решение здесь. Я разрабатываю приложение и в своем приложении скрываю каталог с именем myPic , перемещая его файлы в каталог под названием .myPic . Когда я скрываю свои фотографии, это миниатюры все еще в галерее. Я нахожу 3 решения:

Первое решение:

Используя ACTION_MEDIA_MOUNTED широкий листинг, подобный этому:

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

Проблема с этим кодом заключается в том, что он требует ресурсов hug и, самое главное, блокируется с Android 4.4 . Поэтому использование этого метода не является рациональным для добавления 10 изображений в галерею. Поэтому это не эксклюзивный метод All. Использование ACTION_MEDIA_SCANNER_SCAN_FILE не работает на Android 4.4

Второе решение:

Используя MediaScannerConnection . Поэтому я создал цикл for и передал старый адрес каждого файла, который я скрываю. Это моя функция MediaScannerConnection :

 private void scanFile(File file) { // Tell the media scanner about the new file so that it is // immediately available to the user. 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); } }); } 

MediaScannerConnection касается MediaScannerConnection это то, что он действует только в том случае, если файл существует. Так что скажем, что у меня есть картинка под названием 1.jpg в myPic . Используя этот класс, я могу добавить 1.jpg в мою галерею сразу, но когда я .myPic 1.jpg в каталог .myPic и .myPic старый путь 1.jpg ничего не произойдет. Logcat говорит, что этот файл не exsit. Поэтому MediaScannerConnection только добавляет файлы в галерею. Что, если я MediaScannerConnection новый путь от 1.jpg к MediaScannerConnection ? Хорошо добавляет 1.jpg из .myPic в галерею, и это точно не то, что я хочу. Поэтому снова не все эксклюзивный метод

Третье решение:

Используя getContentResolver() . Поэтому для удаления эскизов этот метод может быть окончательным решением. Поэтому я пишу код удара. В каждом цикле я получаю путь изображения и getContentResolver().delete(Uri.parse(path),null,null) его getContentResolver().delete(Uri.parse(path),null,null) . Вот код:

 File myPic = new File(Environment.getExternalStorageDirectory()+"/myPic"); File myPicHide = new File(Environment.getExternalStorageDirectory()+"/.myPic"); if (!(myPicHide.exists()) & !(myPicHide.isDirectory())) { myPicHide.mkdirs(); }; if (myPic.isDirectory()) { String[] childeren = myPic.list(); if (childeren.length > 0) { for (int i = 0; i < childeren.length; i++) { String fileName = childeren[i]; File from = new File(Environment.getExternalStorageDirectory()+"/myPic"+fileName); File to = new File(Environment.getExternalStorageDirectory()+"/.myPic"+fileName); from.renameTo(to); try { String path = from.toString(); getContentResolver().delete(Uri.parse(path),null,null); } catch(Exception e) { Log.d("Rename", "Error happened"); } } } } else { Toast.makeText(getApplicationContext(), "myPic directory not found", Toast.LENGTH_LONG).show(); } 

Но он не работает, и миниатюры моих файлов все еще отображаются на камбузе. Так я использую getContentResolver() неправильно? Это может быть весь исключительный метод для ситуации, когда в галерее отображаются уменьшенные файлы эскизов. У меня есть путь к файлам, и мне нужно только удалить его из поставщика содержимого медиа-магазина.

Update: так получается, что использование Uri.parse(path) в третьем решении неверно. MediaScannerConnection Uri запускается с content:// и может быть MediaScannerConnection . Поэтому я создал Uri под названием imageInGalleryUri и присвоил ему значение null . Используя мою функцию scanFile я время от времени менял ее значение и передавал ее значение getContentResolver() . Вот код:

  boolean whereIsMediaState = true; Uri imageInGalleryUri = null; File myPic = new File(Environment.getExternalStorageDirectory()+"/myPic"); File myPicHide = new File(Environment.getExternalStorageDirectory()+"/.myPic"); if (!(myPicHide.exists()) & !(myPicHide.isDirectory())) { myPicHide.mkdirs(); }; if (myPic.isDirectory()) { String[] childeren = myPic.list(); if (childeren.length > 0) { for (int i = 0; i < childeren.length; i++) { String fileName = childeren[i]; File from = new File(Environment.getExternalStorageDirectory()+"/myPic"+fileName); scanFile(from); File to = new File(Environment.getExternalStorageDirectory()+"/.myPic"+fileName); from.renameTo(to); if (to.isFile()){ try { getContentResolver().delete(imageInGalleryUri,null,null);} catch(Exception e) { Log.d("Rename", "Error happened"); } } } } else { Toast.makeText(getApplicationContext(), "myPic directory not found", Toast.LENGTH_LONG).show(); } private void scanFile(File file) { // Tell the media scanner about the new file so that it is // immediately available to the user. 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); imageInGalleryUri = uri; } }); } 

Я пробовал код, но он обнаружил только первое изображение и удалял его из галереи, но не влиял на другие изображения. Я не могу понять, почему. Есть идеи?

Спасибо за вашу помощь заранее

Solutions Collecting From Web of "Удалить снимок изображения из галереи, когда он скрыт"