首页 > 解决方案 > 如何在 Android 中删除 SD 卡文件

问题描述

我试图从图库中删除图像文件,但它不会。图像文件正常输出,分享功能完成。它不能在我的应用程序中写入和删除。文件将从默认应用程序中删除。我尝试使用 File 类和 ContentResolver 删除它。但文件没有被删除。Android targetSdkVersion 为 26,compileSdkVersion 为 28。

显现

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

我从 getSDcardPath() 获取 SDcard 路径

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 "";
}

使用的文件类代码

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..."));
    }

标签: androidandroid-sdcard

解决方案


在访问存储之前,您需要请求权限。试试这个:

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
        }
    }
}

希望这对您有所帮助。


推荐阅读