2011-07-15 13 views
12

Potrzebuję usunąć obraz z karty SD wybranej przez użytkownika. W mojej działalności, po użytkownikowi wybrać zdjęcie z galerii, i wykonać ten kod:Android: usuń obraz z karty SD

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Utils.imgUri = data.getData(); 
      Utils.imgPath = getPath(Utils.imgUri); 
      File file = new File(Utils.imgPath); 
      boolean deleted = file.delete(); 
     } 
    } 
} 

gdzie getPath metoda jest:

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    if(cursor!=null){ 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
    else return null; 
} 

Obrazy są prawidłowo usunięty, ale w galeria nadal pozostaje podglądem usuniętego obrazu. Po dotknięciu, zostanie załadowany czarny obraz.

. Jak mogę zaktualizować podgląd galerii po usunięciu niektórych zdjęć z kodu aplikacji?

Odpowiedz

4

Rozwiązane dodając:

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

To sprawia, że ​​bieg usług MediaScanner ponownie, co powinno doprowadzić do usunięcia usuniętego obrazu z pamięci podręcznej urządzenia.

same problem here

+0

Nie działa. Pozostawia obraz w galerii. Instrukcje niejasne powyżej, dodałem twoją linię natychmiast po file.delete(); funkcja jest wywoływana. Jeśli jest to poprawne, kod nie działa zgodnie z przeznaczeniem. – Bisclavret

+0

Super..works like a Charm ... + 1 głosuj –

0

Czy ustawiłeś uprawnienie <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> w pliku manifestu?

0

Czy jesteś pewien, że ścieżka do pliku jest prawidłowa? Ponieważ sposób, w jaki robisz faktyczne usuwanie, powinien być w porządku, zobacz ten wątek SO: How to delete a file from SD card?

Czy/mnt/naprawdę tam jest? Czy masz również uprawnienia do usuwania plików z magazynu? (android.permission.WRITE_EXTERNAL_STORAGE)

+0

Tak, mam to pozwolenie. Co masz na myśli mówiąc "/ mnt/naprawdę tam jesteś?". Dostaję ścieżkę obrazu z Uri za pomocą metody getPath(). – Matteo

+0

Wygląda na to, że ścieżka jest błędna, ponieważ file.exists() zwraca także wartość false. Tutaj jest używany inny (ale podobny) sposób uzyskania ścieżki: http://stackoverflow.com/questions/2507898/how-to-pick-a-image-from-gallery-sd-card-for-my-app- in-android –

0

w parametrze "data" masz również Uri, po prostu wykonaj "data.getUri()". Czy testujesz również na prawdziwych urządzeniach? jeśli tak, a jeśli jest to samsung, to nie działa (zobacz ten thread).

+0

Otrzymuję Uri z "data.getUri()", a następnie otrzymuję ścieżkę metodą "getPath()". Czy istnieje sposób usunięcia pliku za pomocą jego Uri? – Matteo

+0

jeśli używasz obiektu File z tym URI nie działa, a następnie spróbuj użyć contentResolver.delete (uri, null, null) – Finuka

36

Dlaczego chcesz zrobić to, że kompleks?

Można zrobić to tak proste, jak to:

getContentResolver().delete(Utils.imgUri, null, null); 
-2

dodać poniżej kodu w onDestroy

if (myFile.exists()) myFile.delete();

i nie zapomnij dodać uprawnienia w Oczywisty pliku

android.permission.WRITE_EXTERNAL_STORAGE

0

prosta linia;)

new File(uri.getPath()).delete(); 

iw oczywisty musi korzystać z tych uprawnień

android.permission.WRITE_EXTERNAL_STORAGE

+0

Nie wszystkie uridy są ścieżkami. –

+0

Tak, ale to prawda, jeśli grasz na SDCard. –

Powiązane problemy