我有以下设置,但在第三方应用中打开文件时,找不到该文件。
下载文件(以字节为单位)后,我将其存储。
public File storeFile(byte[] b, String ref) throws IOException {
String path = String.valueOf(ref).replaceAll("/+", "_");
final File f = new File(A.getDir(path, Context.MODE_PRIVATE), "downloads");
FileOutputStream out = new FileOutputStream(f);
out.write(b);
out.flush();
out.close();
return f;
}
然后尝试阅读并打开它。
try {
Uri uri = Uri.fromFile(storeFile(bytes, ref));
MimeTypeMap mime = MimeTypeMap.getSingleton();
Intent i = new Intent(Intent.ACTION_VIEW);
String type = mime.getMimeTypeFromExtension(ext);
File imagePath = new File(getFilesDir(), "downloads");
File file = new File(imagePath, uri.getPath());
Uri newUri = FileProvider.getUriForFile(context, "com.do.app.fileprovider", file);
i.setDataAndType(uriContent, type);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
A.startActivity(i);
} catch (IOException e) {
e.printStackTrace();
}
并且在清单中
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.do.app.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
路径
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="cloud_files" path="downloads"/>
</paths>
我似乎无法找到我失踪的东西。
答案 0 :(得分:0)
File imagePath = File(getFilesDir(), "downloads");
这是
中使用的完全不同的目录 File f = new File(A.getDir(path, Context.MODE_PRIVATE), "downloads");
只需比较imagePath.getAbsolutePath()
和f.getAbsolutePath()
;
最好不要构造相同的路径或File
实例两次,而是使用一个变量。
更新。
我现在看到你的代码更糟糕了。
Uri uri = Uri.fromFile(storeFile(bytes, ref));
Uri newUri = FileProvider.getUriForFile(context, "com.do.app.fileprovider", file);
您根本没有使用uri
或newUri
,而是contentUri
。为什么两个/三个uries?改为一个。
Uri uri = FileProvider.getUriForFile(context
, "com.do.app.fileprovider"
, storeFile(bytes, ref));
然后将uri与setDataAndType()
放在已使用的意图中。