Подтвердить что ты не робот

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

этот вопрос задан раньше (не так, как это), но пока еще не было ответа 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;
            }
            });
        }

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

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

4b9b3361

Ответ 1

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