Skocz do zawartości
koziolek90

[ROZWIĄZANE] Programistyczne odświeżanie galerii

    Rekomendowane odpowiedzi

    Witam,

    Spotkałem się z takim problemem, że muszę w mojej aplikacji usuwać wszystkie wykonane zdjęcia i pobrane pliki.

    Napisałem kod który czyści mi foldery z ExternalStorage. Sprawdzałem menadżerem plików i faktycznie - pliki się kasują.

    (Niektóre linijki są zakomentowane ponieważ po wejściu w galerię pojawiał się komunikat, że nie istnieje zewnętrzna pamięć, a bez tych linijek nie usuwa folderów, więc mi to nie przeszkadza.)

    public void wipingSdcard() {
    
           File directories[] = {
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_DCIM),
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_DOCUMENTS),
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_DOWNLOADS),
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_MOVIES),
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_MUSIC),
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_PICTURES),
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_RINGTONES),
                   new File(Environment.getExternalStorageDirectory().toString() + "/" +  Environment.DIRECTORY_ALARMS)
           };
    
           for(int i=0 ; i<directories.length ; i++) {
               File deleteMatchingFile = directories[i];
    
               try {
    
                   File[] filenames = deleteMatchingFile.listFiles();
                   if (filenames != null && filenames.length > 0) {
                       for (File tempFile : filenames) {
    
                           if (tempFile.isDirectory()) {
                               wipeDirectory(tempFile.toString());
    
                               //tempFile.delete();
                           } else {
                               Log.d("Usuwanie danych", "Plik: " + tempFile.toString());
                               tempFile.delete();
                           }
                       }
                   } else {
                       //deleteMatchingFile.delete();
                   }
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
    
       }
    
       private void wipeDirectory(String name) {
           File directoryFile = new File(name);
           File[] filenames = directoryFile.listFiles();
           if (filenames != null && filenames.length > 0) {
               for (File tempFile : filenames) {
                   if (tempFile.isDirectory()) {
                       wipeDirectory(tempFile.toString());
                       //tempFile.delete();
                   } else {
                       Log.d("Usuwanie danych", "Plik: " + tempFile.toString());
                       tempFile.delete();
                   }
               }
           } else {
               //directoryFile.delete();
           }
       }
    

    Jednak po wejściu w galerię miniaturki nadal są. Po wejściu w zdjęcie wyświetla się jedynie szary prostokąt.

    Po uruchomieniu ponownym urządzenia, wszystko jest ok. brak zdjęć w galerii.

    Próbowałem odświeżać programistycznie galerię, ale nic to nie daje, a LogCat nie wypluwa błędów.

           String mCurrentPhotoPath = Environment.getExternalStorageDirectory().toString() + "/" + Environment.DIRECTORY_PICTURES;
    
           Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
           File f = new File(mCurrentPhotoPath);
           Uri contentUri = Uri.fromFile(f);
           mediaScanIntent.setData(contentUri);
           this.sendBroadcast(mediaScanIntent);
    

    Dodam że wchodząc w aplikację galerii, tam wybierając "odśwież", również nic to nie daje.

    Sprawdzałem różne metody odświeżania galerii które znalazłem na stackoverflow, jednak ani jedna u mnie nie zadziałała.

    Coś robię źle?

    Android 4.4.2, Nexus 7

    Edytowane przez koziolek90

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Rozwiązany. Problem polegał na tym, że jako ścieżkę do skanowania podawałem cały folder DCIM. Należało po każdym usuniętym pliku wywołać funkcję do odświeżania galerii ze ścieżka do pliku a nie całego folderu.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x