如何删除路径为 android 11 - java 的音乐文件
How to delete music files with their path android 11 - java
所以我有一个音乐播放器应用程序。我希望用户应该能够删除不是由我的应用程序创建的音乐文件。我有文件路径,我尝试使用 File.delete() 但它总是 returns 错误。如何使用路径删除音乐文件。请有人帮忙。
我正在使用的路径 File.getPath - /storage/emulated/0/Samsung/Music/Over_the_horizon.mp3
我的AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.naman.musicplayer">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MusicPlayer">
<activity
android:name=".PlaySong"
android:exported="true" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
**Code I am using to delete the music**
``` @Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
File file = files.get(i);
//files = new ArrayList<File>();
boolean deleted = file.delete();
return deleted;
}```
你试过了吗Context.deleteFile()?
getApplicationContext().deleteFile(filename);
/storage/emulated/0/Samsung/Music/Over_the_horizon.mp3
该文件不是由您的应用程序创建的。
在 Android 11 设备上,您无法使用经典文件系统工具 read/write/delete 这样的文件,因为您的应用不是所有者。
File.canRead() 和 File.canWrite() 会告诉你。
要删除文件,请使用 ACTION_OPEN_DOCUMENT
让用户先选择文件。
另一种可能是获取该文件的媒体存储 uri,然后使用 MediaStore.createDeleteRequest()
进行删除。
试试这个:
File file = new File(path);
if (!file.exists()) return;
if (file.isFile()) {
file.delete();
return;
}
File[] fileArr = file.listFiles();
if (fileArr != null) {
for (File subFile : fileArr) {
if (subFile.isDirectory()) {
deleteFile(subFile.getAbsolutePath());
}
if (subFile.isFile()) {
subFile.delete();
}
}
}
file.delete();
path
是一个 String
所以我有一个音乐播放器应用程序。我希望用户应该能够删除不是由我的应用程序创建的音乐文件。我有文件路径,我尝试使用 File.delete() 但它总是 returns 错误。如何使用路径删除音乐文件。请有人帮忙。 我正在使用的路径 File.getPath - /storage/emulated/0/Samsung/Music/Over_the_horizon.mp3
我的AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.naman.musicplayer">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MusicPlayer">
<activity
android:name=".PlaySong"
android:exported="true" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
**Code I am using to delete the music**
``` @Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
File file = files.get(i);
//files = new ArrayList<File>();
boolean deleted = file.delete();
return deleted;
}```
你试过了吗Context.deleteFile()?
getApplicationContext().deleteFile(filename);
/storage/emulated/0/Samsung/Music/Over_the_horizon.mp3
该文件不是由您的应用程序创建的。
在 Android 11 设备上,您无法使用经典文件系统工具 read/write/delete 这样的文件,因为您的应用不是所有者。
File.canRead() 和 File.canWrite() 会告诉你。
要删除文件,请使用 ACTION_OPEN_DOCUMENT
让用户先选择文件。
另一种可能是获取该文件的媒体存储 uri,然后使用 MediaStore.createDeleteRequest()
进行删除。
试试这个:
File file = new File(path);
if (!file.exists()) return;
if (file.isFile()) {
file.delete();
return;
}
File[] fileArr = file.listFiles();
if (fileArr != null) {
for (File subFile : fileArr) {
if (subFile.isDirectory()) {
deleteFile(subFile.getAbsolutePath());
}
if (subFile.isFile()) {
subFile.delete();
}
}
}
file.delete();
path
是一个 String