Удаление файла с помощью URI не работает - PullRequest
0 голосов
/ 01 декабря 2018

Я хочу построить диспетчер файлов. Я получаю список всех файлов, используя ContentResolver. Например, я получаю все аудиофайлы следующим образом:

   private void getMusic(){

    ContentResolver contentResolver=getContentResolver();
    Uri songUri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor songCursor=contentResolver.query(songUri,null,null,null,null);

    if(songCursor!=null && songCursor.moveToFirst()){
        Log.e(TAG,"if :");
        int songTitle=songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        int songPath=songCursor.getColumnIndex(MediaStore.Audio.Media.DATA);

        do{
            String currentTitle=songCursor.getString(songTitle);
            Uri currentPath=Uri.parse(songCursor.getString(songPath));
             models.add(new model(currentTitle,currentPath));
             adapter.notifyDataSetChanged();
        }while (songCursor.moveToNext());
    }
}

Я пишу этот метод для удаления файла,но у меня не сработало. Я также получаю от пользователя ЗАПИСЬ и ЧИТАТЬ внешнее разрешение.

 private void deleteItem(int position){
    File fdelete = new File(models.get(position).getPath().toString());
    if (fdelete.exists()) {
        boolean flag=fdelete.delete();
        if (flag) {
            models.remove(models.get(position));
            adapter.notifyDataSetChanged();
            disableSelectionMode();
            Toast.makeText(this,"File successfully deleted.",Toast.LENGTH_SHORT).show();
        } else {
            disableSelectionMode();
            Toast.makeText(this,"File did not deleted!",Toast.LENGTH_SHORT).show();
        }
    }
}

И это моя модель:

    public class model {
    private int id;
    private String title;
    private Uri path;

    public model(String title, Uri path) {
        this.title = title;
        this.path = path;
    }


    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Uri getPath() {
        return path;
    }

    public void setPath(Uri path) {
        this.path = path;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }   
}

1 Ответ

0 голосов
/ 02 декабря 2018

Наконец-то я нашел решение. Я должен удалить файл, используя ContentResolver.Я сделал это так:

private void deleteItem(model item){
    switch (type){
        case AUDIOS:{
            int b=getContentResolver().delete(
                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    MediaStore.MediaColumns.DATA + "='" + item.getPath().getPath() + "'", null
            );
            Log.e(TAG,"b: "+b);
            break;
        }
        case IMAGES:{
            int b=getContentResolver().delete(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    MediaStore.MediaColumns.DATA + "='" + item.getPath().getPath() + "'", null
            );
            Log.e(TAG,"b: "+b);
            break;
        }
        case VIDEOS:{
            int b=getContentResolver().delete(
                    MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                    MediaStore.MediaColumns.DATA + "='" + item.getPath().getPath() + "'", null
            );
            Log.e(TAG,"b: "+b);
            break;
        }
        case COMPRESSED:
        case APPS:
        case DOCUMENTS :{
            int bex=getContentResolver().delete(
                    MediaStore.Files.getContentUri("external"),
                    MediaStore.MediaColumns.DATA + "='" + item.getPath().getPath() + "'", null
            );
            int bin=getContentResolver().delete(
                    MediaStore.Files.getContentUri("internal"),
                    MediaStore.MediaColumns.DATA + "='" + item.getPath().getPath() + "'", null
            );
            Log.e(TAG,"bex: "+bex);
            Log.e(TAG,"bin: "+bin);
            break;
        }

    }
}
...