如何删除 Android 中的 SD 卡文件

How to delete SDcard file in Android

我试图从图库中删除图像文件,但没有成功。图片文件正常输出,分享功能也搞定了。它不能在我的应用程序中写入和删除。文件已从默认应用程序中删除。 我尝试使用 File class 和 ContentResolver 删除它。但文件没有被删除。 AndroidtargetSdkVersion为26,compileSdkVersion为28。

清单

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我从 getSDcardPath() 获取 SD 卡路径

public String getSDcardPath(Context context) {
   File[] storage = ContextCompat.getExternalFileDirs(context, null);

   if(storage.length > 1 && storage[0] != null && storage[1] != null)
     return storage[1].toString();
   else
     return "";
}

文件Class使用代码

public void useFileClass() {
   File mFile = new File("file Parent + file NAME");

   if (mFile.exists()) {
   mFile.delete();
   }
}

使用的 ContentResolver 代码

public void useContentResolver(Context context, File mFile) {

   ContentResolver contentResolver = context.getContentResolver();
   Uri mUri = getUri(context, mFile);

   contentResolver.delete(mUri, null, null);
}

public Uri getUri(Context context, File mFile) {
   Uri mUri;

   mUri = FileProvider.getUriForFile(context, "MyApplication", mFile);
   return mUri;
}

分享代码

public void shareImage() {
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.setType("image/*");
        shareIntent.putExtra(Intent.EXTRA_STREAM, getUri(this, mFile));

        startActivity(Intent.createChooser(shareIntent, "Share image too..."));
    }

您需要请求权限才能访问存储。试试这个:

private static final int MY_WRITE_STORAGE_PERMISSION_CODE = 200;    

private void checkPermission() {
    if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_WRITE_STORAGE_PERMISSION_CODE);
        } else {
            // Todo (Add, Delete, Edit, ...)
        }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
            @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);


    if(requestCode == MY_WRITE_STORAGE_PERMISSION_CODE)
    {
        if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            // Todo (Add, Delete, Edit, ...)
        } else {
            // Permission Deny
        }
    }
}

希望对您有所帮助。