Android 8.1 - Почему я не могу удалить файл песни? - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь удалить файл песни из памяти телефона с помощью этого кода:

private void deleteSongs(){
    String path = song.getPath();
    File songFile = new File(path);

    Log.d(TAG, "Song exists: " + songFile.exists());
    Log.d(TAG, "Song is directory: " + songFile.isDirectory());
    Log.d(TAG, "Song path: " + songFile.getPath());
    Log.d(TAG, "Song name: " + songFile.getName());

    if(songFile.delete())
        Log.d(TAG, "Song deleted successfully by File.delete()");
    else{
        Log.d(TAG, "Can't delete file by File.delete()");
        if(getActivity().deleteFile(songFile.getName()))
            Log.d(TAG, "Song deleted successfully by Activity.deleteFile()");
        else
            Log.d(TAG, "Can't delete file by Activity.deleteFile()");
    }
}

, но он не работает.Logcat говорит:

D/DeleteSongDialog: Song exists: true
D/DeleteSongDialog: Song is directory: false
D/DeleteSongDialog: Song path: /storage/emulated/0/Download/2 sekundowy film-20.m4a
D/DeleteSongDialog: Song name: 2 sekundowy film-20.m4a
D/DeleteSongDialog: Can't delete file by File.delete()
D/DeleteSongDialog: Can't delete file by Activity.deleteFile()

Решение с FileProvider не работает для Android> = 8.0, но работает, например, на Android 7.0.Может быть, у кого-то есть идея, что мне изменить в своем коде или @ CodeToLife ?

Заранее спасибо.

Ответы [ 2 ]

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

@ CommonsWare помог мне найти решение.Мне пришлось изменить этот код на:

Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, song.getId());
getActivity().getContentResolver().delete(uri, null, null);

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

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

Заменить getActivity().deleteFile(songFile.getName()) на songFile.delete().Также убедитесь, что у вас есть разрешение WRITE_EXTERNAL_STORAGE, включая запрос этого разрешения во время выполнения на Android 6.0 +.

...