我有两个 android 应用程序 A 和 B。我正在将一个文件从应用程序 A 传递到应用程序 B,我看到应用程序 B 正在获取 URI。我FLAG_GRANT_READ_URI_PERMISSION
在应用程序 A 中设置标志,我看到这mFlags
是一个 1,它是FLAG_GRANT_READ_URI_PERMISSION
来自应用程序 B 的值。这一切都很好,但是当我尝试FileInputStream
从 URI 创建一个时,我得到一个FileNotFoundException (Permission denied)
异常。我究竟做错了什么?
以下是相关的代码片段:
在应用程序 A 中:
public void openTest Intent(String filePath) {
Intent testIntent = new Intent("com.example.appB.TEST");
testIntent.addCategory(Intent.CATEGORY_DEFAULT);
testIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
testIntent.setDataAndType(Uri.parse("file://"+filePath),"text/plain");
try {
startActivityForResult(testIntent, OPEN_NEW_TERM);
} catch (ActivityNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在应用 B 中:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (intent.getAction().equals("com.example.appB.TEST")) {
Uri fileUri = intent.getData();
File srcFile = new File(fileUri.getPath());
File destFolder = getFilesDir();
File destFile = new File(destFolder.getAbsolutePath()+srcFile.getName());
try {
copyFile(srcFile,destFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void copyFile(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src); //**this is where it dies**
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
正是当我创建它时in
,它才会出现异常。关于为什么的任何想法?