Java 安卓-文件赢得';t移动或复制到内部应用程序存储
我有一个应用程序,它使用DownloadManager将一些文件下载到基本的内部音乐目录,通过使用Java 安卓-文件赢得';t移动或复制到内部应用程序存储,java,android,file,copy,move,Java,Android,File,Copy,Move,我有一个应用程序,它使用DownloadManager将一些文件下载到基本的内部音乐目录,通过使用Environment.getExternalStoragePublicDirectory(Environment.directory\u music)找到。我想将音乐文件移动到我的应用程序的内部存储器中,以减少用户意外删除这些文件的可能性。我正在使用getFilesDir()获取应用程序内部存储目录的路径。然而,几乎所有我尝试的东西,它们都没有出现在那里。以下是我所做的: AndroidManif
Environment.getExternalStoragePublicDirectory(Environment.directory\u music)
找到。我想将音乐文件移动到我的应用程序的内部存储器中,以减少用户意外删除这些文件的可能性。我正在使用getFilesDir()
获取应用程序内部存储目录的路径。然而,几乎所有我尝试的东西,它们都没有出现在那里。以下是我所做的:
AndroidManifest.xml:我已经设置了必要的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
输入流和输出流:
InputStream is = new FileInputStream(src);
OutputStream os = new FileOutputStream(dst);
byte[] buff = new byte[1024];
int len;
while((len = is.read(buff)) > 0){
os.write(buff, 0, len);
}
is.close();
os.close();
这是完整目录的代码:
String sourcePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/" + cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)) + ".mp3";
String destinationPath = getFilesDir() + "/" + cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)) + ".mp3";
我没有发现FileIO异常或类似的错误。这些文件不显示在指定的目标目录中。任何帮助或见解都将不胜感激。谢谢 解决方案:
在res/xml文件夹中创建可共享的_path.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="external_files"
path="." />
<external-files-path
name="external_files"
path="." />
<root-path
name="sdcard1"
path="." />
</paths>
将以下内容添加到清单文件:
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false"
android:authorities="${applicationId}">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/shareable_paths"/>
</provider>
...
...
</application>
...
...
...
原因:
必须将文件提供程序设置为执行存储操作我刚刚尝试了此操作。这些文件仍然不会显示在模拟器中的指定路径中。我在我的实际手机上进行了尝试,但我认为我没有访问该目录的权限,因为我的手机不是rootedRoot不应该是问题,您是否使用请求权限从用户处获取了权限<代码>文件提供程序必须设置为执行存储操作。一点也不。不在同一个应用程序中。什么是src?什么是dst?如何检查文件是否出现?
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:grantUriPermissions="true"
android:exported="false"
android:authorities="${applicationId}">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/shareable_paths"/>
</provider>
...
...
</application>