メールの添付ファイルとして送信するファイルを作成しています。メール送信後に画像を削除したいのですが。ファイルを削除する方法はありますか?
試しましたmyFile.delete();
が、ファイルは削除されませんでした。
私はこのコードをAndroidで使用しているため、プログラミング言語はJavaであり、通常のAndroidの方法でSDカードにアクセスします。メール送信後に画面に戻ったonActivityResult
場合、メソッド内のファイルを削除していますIntent
。
メールの添付ファイルとして送信するファイルを作成しています。メール送信後に画像を削除したいのですが。ファイルを削除する方法はありますか?
試しましたmyFile.delete();
が、ファイルは削除されませんでした。
私はこのコードをAndroidで使用しているため、プログラミング言語はJavaであり、通常のAndroidの方法でSDカードにアクセスします。メール送信後に画面に戻ったonActivityResult
場合、メソッド内のファイルを削除していますIntent
。
回答:
File file = new File(selectedFilePath);
boolean deleted = file.delete();
ここで、selectedFilePathは削除するファイルのパスです-例:
/sdcard/YourCustomDirectory/ExampleFile.mp3
また、> 1.6 SDKを使用している場合は、許可を与える必要があります
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
でAndroidManifest.xml
、ファイル
ContentResolver
アプリは、パッケージ固有のディレクトリ以外の外部ストレージへの書き込み(削除、変更...)を許可されていません。
Androidのドキュメントには次のように記載されています。
「合成されたアクセス許可で許可されているパッケージ固有のディレクトリを除き、アプリはセカンダリ外部ストレージデバイスへの書き込みを許可されてはなりません。」
ただし、厄介な回避策があります(以下のコードを参照)。Samsung Galaxy S4でテスト済みですが、この修正はすべてのデバイスで機能するわけではありません。また、私はこの回避策が将来利用可能になることを期待しません Androidのバージョンで。
外部ストレージのアクセス許可の変更(4.4以降)について説明したすばらしい記事があります。
あなたは読むことができます回避策の詳細についてはこちら。回避策のソースコードはこのサイトにあります。
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;
}
}
false
、ファイルを削除しません:-(
これは私のために働きます:(ギャラリーから画像を削除)
File file = new File(photoPath);
file.delete();
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(photoPath))));
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());
}
このコードはあなたを助けます。そしてAndroidマニフェストでは、変更を行うための許可を得る必要があります。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
file.exists:true file.isDirectory:true file.canRead:false file.canWrite:false
申し訳ありませんが、サイトの検証のため、以前はコードに誤りがありました。
String myFile = "/Name Folder/File.jpg";
String myPath = Environment.getExternalStorageDirectory()+myFile;
File f = new File(myPath);
Boolean deleted = f.delete();
はっきりしていると思います...まず、ファイルの場所を知る必要があります。次にEnvironment.getExternalStorageDirectory()
、アプリディレクトリを取得するメソッドです。最後に、ファイルを処理するFileクラス...
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
}
File filedel = new File("/storage/sdcard0/Baahubali.mp3");
boolean deleted1 = filedel.delete();
または、これを試してください:
String del="/storage/sdcard0/Baahubali.mp3";
File filedel2 = new File(del);
boolean deleted1 = filedel2.delete();