Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以外部意图/应用程序打开文件_Java_Android_File_Android Intent_Io - Fatal编程技术网

Java 以外部意图/应用程序打开文件

Java 以外部意图/应用程序打开文件,java,android,file,android-intent,io,Java,Android,File,Android Intent,Io,在应用程序的fileDirectory中创建文件后,我想用Adobe Reader等外部应用程序打开它。为了实现这一点,我尝试使用下面代码中的Intent ContextWrapper cw = new ContextWrapper(getApplicationContext()); java.io.File fileItem = new java.io.File(cw.getFilesDir() + "/sync/arbitraryFileName.extension"); MimeType

在应用程序的
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外壳中,我可以找到与代码中使用的路径完全相同的文件。 我已经补充了

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


在我的代码中,但它没有任何帮助。

第三方应用程序无法访问您的应用程序的部分。使用类似于
FileProvider
的方法

此外:

  • 将上述代码中出现的所有
    getApplicationContext()
    替换为
    this
    。只有当您知道使用
    getApplicationContext()的确切原因时,才能使用
    getApplicationContext()

  • 摆脱
    ContextWrapper
    ,因为您不需要它


好的-我在哪里可以创建可以被外部应用程序访问的文件?@FlashTek:从Android 7.0开始,这不是一个实际的选项,因为一旦
目标版本
为24或更高,你就不能将
文件
Uri
(例如,
Uri.fromFile()
)传递给其他应用程序。欢迎您将内容存储在当前位置。使用
FileProvider
将此内容提供给其他应用程序。