Как удалить файл SDcard в Android

Я попытался удалить файл изображения из галереи, но это не так. Файлы изображений выводятся нормально, и функции обмена выполняются. Он не может писать и удалять в моем приложении. Файлы удаляются из приложения по умолчанию. Я попытался удалить его, используя класс 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"/>

Я получаю путь к SD-карте из getSDcardPath()

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

person Jade    schedule 16.01.2020    source источник
comment
getExternalFilesDir() не имеет ничего общего со съемной картой micro SD. Пожалуйста, переименуйте свои функции и опишите свою проблему менее запутанно.   -  person blackapps    schedule 16.01.2020
comment
new File("file Parent + file NAME"); ??? Пожалуйста, предоставьте реальный код.   -  person blackapps    schedule 16.01.2020
comment
файл Parent+ file NAME не является реальным кодом. Путь к файлу вводится в файле Parent+ file NAME   -  person Jade    schedule 17.01.2020
comment
Пожалуйста, опубликуйте реальный код.   -  person blackapps    schedule 17.01.2020
comment
Файл mFile = новый файл (/storage/421E-25A8/DCIM/100HSCAM/SING0084.JPG);   -  person Jade    schedule 17.01.2020
comment
Разместите весь реальный код в своем посте. Не в комментариях. Сделайте нормальный пост для начала.   -  person blackapps    schedule 17.01.2020
comment
И .. лучше .. вы должны показать в своем коде, где и как вы используете полученный путь к SD-карте. Пока мы не знаем, что вы делаете.   -  person blackapps    schedule 17.01.2020


Ответы (1)


Вам необходимо запросить разрешение перед доступом в хранилище. Попробуй это:

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

Надеюсь, это поможет вам.

person Littlepylunas    schedule 16.01.2020
comment
Я попробую. Но было проверено, что разрешение.WRITE_EXTERNAL_STORAGE содержит манифест. Невозможно удалить файл.. Спасибо, что поделились со мной, как проверить разрешение. - person Jade; 17.01.2020