【问题标题】:Does Android have a similar class to Java's Desktop.getDesktop() for opening files or prompting the user to choose an application association?Android 是否有与 Java 的 Desktop.getDesktop() 类似的类来打开文件或提示用户选择应用程序关联?
【发布时间】:2020-03-12 17:52:26
【问题描述】:

我们正在尝试做的事情:我们正在尝试将现有的 Java 桌面应用程序复制到 Android 应用程序中(同样基于 Java)。桌面应用程序使用以下桌面类代码打开传递给它的任何形式的文件类型(例如 docx、xlsx、txt、pdf.jpg 等)。此代码会将文件打开到关联的应用程序,如果没有关联或不存在,则提示用户选择应用程序。

我们的问题:作为 Android 开发和系统类的新手,我们无法正确识别 Android 中是否存在这样的类或找到它的适当术语,并且可以使用您的帮助。

Desktop.getDesktop().open(file); // Java version

【问题讨论】:

  • 对应的操作是用ACTION_VIEWIntent启动一个activity。 documentation on common Intents 侧重于媒体播放,但相同的结构适用于其他文件类型。请记住,Android 中没有“如果没有关联或不存在” - 如果设备没有支持所需文件类型的应用,您的 startActivity() 调用将引发 ActivityNotFoundException
  • @CommonsWare:感谢您的解释和抽出时间。听起来好像我需要进一步了解如何使用 Intents 并适应可能的异常。到目前为止,我使用 Intent 的目的都是为了启动一个活动并在需要时向活动传递一个参数。

标签: java android android-file


【解决方案1】:

我确实根据 CommonWare 的建议使用Intent(见上文)解决了我的问题。但是,我确实遇到了许多 Uri 路径问题,并且需要在构建 Intent 中使用的 Uri 时使用 FileProvider 来处理内部文件路径。

我提供了用于构建我的 Uri 路径的代码,该路径传递给 Intent(包装在 openFile(Uri uri) 方法中。如果有助于查看我如何使用 Intent 的完整上下文,您可以在此处查看: (Why would an Android Open File intent hang while opening an image?)。

处理实际 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 类调用开始。

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);

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2011-12-10
    • 2018-02-25
    相关资源
    最近更新 更多