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