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

этот вопрос задан раньше (не так, как это), но пока еще не было ответа 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 заключается в том, что она действует только в том случае, если файл существует. поэтому скажем, что у меня есть изображение под названием 1.jpg в каталоге myPic. используя этот класс, я могу сразу добавить 1.jpg в мою галерею, но когда я перемещаю каталог 1.jpg в .myPic, и я просматриваю старый путь 1.jpg, ничего не происходит. logcat говорит, что этот файл не exsit. поэтому MediaScannerConnection добавлять файлы в галерею. что, если я передаю новый путь от 1.jpg до MediaScannerConnection? хорошо он добавляет 1.jpg из .myPic в галерею, и это точно не, что я хочу. поэтому снова не весь эксклюзивный метод

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

с помощью getContentResolver(). поэтому для удаления эскизов этот метод может быть окончательным решением. поэтому я пишу код удара. в каждом цикле я получаю путь изображения и передаю его в 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() неправильно? это может быть весь исключительный метод для ситуации, когда уменьшенные файлы отображаются в галерее. У меня есть путь к файлам, и мне нужно только удалить его из поставщика содержимого медиа-магазина.

обновление: так что получается, что использование Uri.parse(path) в третьем решении неверно. Изображение 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;
            }
            });
        }

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

Благодарим вас за помощь заранее

Ответ 1

. перед тем как папка сделает его невидимым. Но есть способ сказать, что не используйте эту папку вообще в галерее. Попробуйте поместить в вашу папку пустой файл под названием ".nomedia".