Android 是否有类似于 Java 的 Desktop.getDesktop() 的 class 打开文件或提示用户选择应用程序关联?
Does Android have a similar class to Java's Desktop.getDesktop() for opening files or prompting the user to choose an application association?
我们正在尝试做的事情:我们正在尝试将现有的 Java 桌面应用程序复制到 Android 应用程序(基于 Java)。桌面应用程序使用以下 Desktop class 代码打开传递给它的任何形式的文件类型(例如 docx、xlsx、txt、pdf.jpg 等)。如果 none 关联或存在,此代码将打开文件到关联的应用程序或提示用户 select 应用程序。
我们的问题: 作为 Android 开发和系统的新手 classes,我们无法正确识别是否存在这样的问题class 在 Android 或正确的术语中找到它并需要你的帮助。
Desktop.getDesktop().open(file); // Java version
我确实根据 CommonWare 的 使用 Intent
的建议(见上文)解决了我的问题。但是,我确实遇到了一些 Uri
路径问题,需要在构建 Intent 中使用的 Uri 时使用 FileProvider
来处理内部文件路径。
我提供了用于构建传递给 Intent 的 Uri 路径的代码(包装在 openFile(Uri uri)
方法中。如果它有助于查看我如何使用 Intent 的完整上下文,您可以在这里看到:().
处理实际 Intent 的 openFile():
private void openFile(Uri uri){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 2);
}
TableRow onClick()
从 TableRow 值 创建 Uri
Uri 是通过 FileProvider 构建的,从 File class 调用开始。
row.setOnClickListener(v -> {
TableRow tablerow = (TableRow) v;
TextView sample = (TextView) tablerow.getChildAt(1);
String result = sample.getText().toString();
File filePaths = new File(getFilesDir().toString());
File newFile = new File(filePaths, result);
Uri contentUri = getUriForFile(getApplicationContext(), "com.mydomain.fileprovider", newFile);
openFile(contentUri);
});
我们正在尝试做的事情:我们正在尝试将现有的 Java 桌面应用程序复制到 Android 应用程序(基于 Java)。桌面应用程序使用以下 Desktop class 代码打开传递给它的任何形式的文件类型(例如 docx、xlsx、txt、pdf.jpg 等)。如果 none 关联或存在,此代码将打开文件到关联的应用程序或提示用户 select 应用程序。
我们的问题: 作为 Android 开发和系统的新手 classes,我们无法正确识别是否存在这样的问题class 在 Android 或正确的术语中找到它并需要你的帮助。
Desktop.getDesktop().open(file); // Java version
我确实根据 CommonWare 的 使用 Intent
的建议(见上文)解决了我的问题。但是,我确实遇到了一些 Uri
路径问题,需要在构建 Intent 中使用的 Uri 时使用 FileProvider
来处理内部文件路径。
我提供了用于构建传递给 Intent 的 Uri 路径的代码(包装在 openFile(Uri uri)
方法中。如果它有助于查看我如何使用 Intent 的完整上下文,您可以在这里看到:(
处理实际 Intent 的 openFile():
private void openFile(Uri uri){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 2);
}
TableRow onClick()
从 TableRow 值 创建 Uri
Uri 是通过 FileProvider 构建的,从 File class 调用开始。
row.setOnClickListener(v -> {
TableRow tablerow = (TableRow) v;
TextView sample = (TextView) tablerow.getChildAt(1);
String result = sample.getText().toString();
File filePaths = new File(getFilesDir().toString());
File newFile = new File(filePaths, result);
Uri contentUri = getUriForFile(getApplicationContext(), "com.mydomain.fileprovider", newFile);
openFile(contentUri);
});