在应用程序的fileDirectory
中创建文件后,我想用Adobe Reader等外部应用程序打开它。为了实现这一点,我尝试在下面的代码中使用Intent
。
ContextWrapper cw = new ContextWrapper(getApplicationContext());
java.io.File fileItem = new java.io.File(cw.getFilesDir() + "/sync/arbitraryFileName.extension");
MimeTypeMap myMime = MimeTypeMap.getSingleton();
Intent newIntent = new Intent(Intent.ACTION_VIEW);
String fileExtension = StaticHelper.fileExt(((File) item).getFileName());
if (fileExtension != null) {
String mimeType = myMime.getMimeTypeFromExtension(fileExtension);
String bb = Uri.fromFile(fileItem).toString();
newIntent.setDataAndType(Uri.fromFile(fileItem), mimeType);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
getApplicationContext().startActivity(newIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), "no extension found", Toast.LENGTH_SHORT).show();
}
但遗憾的是这段代码不起作用:应用程序总是说该文件不存在 - 但在设备的ADB shell中,我可以找到与我的代码中使用的路径完全相同的文件。 我已经添加了
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在我的代码中,但它根本没用。
答案 0 :(得分:2)
第三方应用无权访问您应用的internal storage部分。使用类似FileProvider
to make this content available to other apps的内容。
此外:
在上面显示的代码中将所有getApplicationContext()
替换为this
。只有当您知道确切原因时才使用getApplicationContext()
。{/ p>
摆脱getApplicationContext()
,因为你不需要它。