Tworzę plik do wysłania jako załącznik do wiadomości e-mail. Teraz chcę usunąć obraz po wysłaniu wiadomości e-mail. Czy istnieje sposób na usunięcie pliku?
Próbowałem, myFile.delete();
ale plik nie został usunięty.
Używam tego kodu dla Androida, więc językiem programowania jest Java przy użyciu zwykłych sposobów Androida, aby uzyskać dostęp do karty SD. Usuwam plik w onActivityResult
metodzie, gdy Intent
po wysłaniu wiadomości e-mail wraca na ekran.
android
android-sdcard
błoto
źródło
źródło
Odpowiedzi:
File file = new File(selectedFilePath); boolean deleted = file.delete();
gdzie selectedFilePath to ścieżka do pliku, który chcesz usunąć - na przykład:
źródło
Musisz także wyrazić zgodę, jeśli używasz> 1.6 SDK
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
w
AndroidManifest.xml
plikuźródło
ContentResolver
Zmiana na Androida 4.4+
Aplikacje są niedozwolone do zapisu (usuwać, modyfikować ...) do zewnętrznej pamięci masowej z wyjątkiem ich pakiet specyficznych katalogów.
Zgodnie z dokumentacją systemu Android:
Jednak istnieje nieprzyjemne obejście (patrz kod poniżej) . Testowane na Samsung Galaxy S4, ale ta poprawka nie działa na wszystkich urządzeniach. Nie liczyłbym też, że to obejście będzie dostępne w przyszłych wersjach Androida.
Jest świetny artykuł wyjaśniający (4.4+) zmianę uprawnień do pamięci zewnętrznej .
Możesz przeczytać więcej o obejściu tutaj . Kod źródłowy obejścia pochodzi z tej witryny .
public class MediaFileFunctions { @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static boolean deleteViaContentProvider(Context context, String fullname) { Uri uri=getFileUri(context,fullname); if (uri==null) { return false; } try { ContentResolver resolver=context.getContentResolver(); // change type to image, otherwise nothing will be deleted ContentValues contentValues = new ContentValues(); int media_type = 1; contentValues.put("media_type", media_type); resolver.update(uri, contentValues, null, null); return resolver.delete(uri, null, null) > 0; } catch (Throwable e) { return false; } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private static Uri getFileUri(Context context, String fullname) { // Note: check outside this class whether the OS version is >= 11 Uri uri = null; Cursor cursor = null; ContentResolver contentResolver = null; try { contentResolver=context.getContentResolver(); if (contentResolver == null) return null; uri=MediaStore.Files.getContentUri("external"); String[] projection = new String[2]; projection[0] = "_id"; projection[1] = "_data"; String selection = "_data = ? "; // this avoids SQL injection String[] selectionParams = new String[1]; selectionParams[0] = fullname; String sortOrder = "_id"; cursor=contentResolver.query(uri, projection, selection, selectionParams, sortOrder); if (cursor!=null) { try { if (cursor.getCount() > 0) // file present! { cursor.moveToFirst(); int dataColumn=cursor.getColumnIndex("_data"); String s = cursor.getString(dataColumn); if (!s.equals(fullname)) return null; int idColumn = cursor.getColumnIndex("_id"); long id = cursor.getLong(idColumn); uri= MediaStore.Files.getContentUri("external",id); } else // file isn't in the media database! { ContentValues contentValues=new ContentValues(); contentValues.put("_data",fullname); uri = MediaStore.Files.getContentUri("external"); uri = contentResolver.insert(uri,contentValues); } } catch (Throwable e) { uri = null; } finally { cursor.close(); } } } catch (Throwable e) { uri=null; } return uri; } }
źródło
false
i nie usuwa pliku :-(Kontekst systemu Android ma następującą metodę:
public abstract boolean deleteFile (String name)
Wierzę, że zrobi to, co chcesz, z odpowiednimi założeniami aplikacji, jak wymieniono powyżej.
źródło
context.deleteFile(filename);
Rekurencyjnie usuń wszystkie elementy podrzędne pliku ...
public static void DeleteRecursive(File fileOrDirectory) { if (fileOrDirectory.isDirectory()) { for (File child : fileOrDirectory.listFiles()) { DeleteRecursive(child); } } fileOrDirectory.delete(); }
źródło
To działa dla mnie: (Usuń obraz z galerii)
File file = new File(photoPath); file.delete(); context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(photoPath))));
źródło
public static boolean deleteDirectory(File path) { // TODO Auto-generated method stub if( path.exists() ) { File[] files = path.listFiles(); for(int i=0; i<files.length; i++) { if(files[i].isDirectory()) { deleteDirectory(files[i]); } else { files[i].delete(); } } } return(path.delete()); }
Ten kod pomoże ci ... W Manifeście Androida musisz uzyskać uprawnienia do wprowadzania zmian.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
źródło
file.exists:true file.isDirectory:true file.canRead:false file.canWrite:false
Spróbuj tego.
File file = new File(FilePath); FileUtils.deleteDirectory(file);
z Apache Commons
źródło
Przepraszamy: mój kod był wcześniej błędny z powodu weryfikacji witryny.
String myFile = "/Name Folder/File.jpg"; String myPath = Environment.getExternalStorageDirectory()+myFile; File f = new File(myPath); Boolean deleted = f.delete();
Myślę, że jest jasne ... Najpierw musisz znać lokalizację swojego pliku. Po drugie ,,,
Environment.getExternalStorageDirectory()
to metoda, która pobiera katalog aplikacji. Na koniec klasa File, która obsługuje twój plik ...źródło
Miałem podobny problem z aplikacją działającą na 4.4. To, co zrobiłem, było czymś w rodzaju włamania.
Zmieniłem nazwy plików i zignorowałem je w mojej aplikacji.
to znaczy.
File sdcard = Environment.getExternalStorageDirectory(); File from = new File(sdcard,"/ecatAgent/"+fileV); File to = new File(sdcard,"/ecatAgent/"+"Delete"); from.renameTo(to);
źródło
To zadziałało dla mnie.
String myFile = "/Name Folder/File.jpg"; String my_Path = Environment.getExternalStorageDirectory()+myFile; File f = new File(my_Path); Boolean deleted = f.delete();
źródło
private boolean deleteFromExternalStorage(File file) { String fileName = "/Music/"; String myPath= Environment.getExternalStorageDirectory().getAbsolutePath() + fileName; file = new File(myPath); System.out.println("fullPath - " + myPath); if (file.exists() && file.canRead()) { System.out.println(" Test - "); file.delete(); return false; // File exists } System.out.println(" Test2 - "); return true; // File not exists }
źródło
Możesz usunąć plik w następujący sposób:
File file = new File("your sdcard path is here which you want to delete"); file.delete(); if (file.exists()){ file.getCanonicalFile().delete(); if (file.exists()){ deleteFile(file.getName()); } }
źródło
File filedel = new File("/storage/sdcard0/Baahubali.mp3"); boolean deleted1 = filedel.delete();
Lub spróbuj tego:
String del="/storage/sdcard0/Baahubali.mp3"; File filedel2 = new File(del); boolean deleted1 = filedel2.delete();
źródło