【问题标题】:Android list applications that can view an unknown fileAndroid 列出可以查看未知文件的应用程序
【发布时间】:2012-01-11 18:26:44
【问题描述】:

您好,我正在开发一个应用程序,我需要列出能够打开文件的所有类型的应用程序。如果文件是图像,我通常会做这样的事情来显示所有能够查看图像的应用程序。

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "image/*");
context.startActivity(intent);

但是说我有一个未知文件,我如何列出所有能够查看文件的应用程序,以便用户可以选择适当的应用程序在我的应用程序中打开文件。

如果可能的话,我还需要在数组列表中列出的标题,以便我可以在列表视图中列出它们。

感谢您在获取能够查看文件的应用程序列表方面提供的任何帮助

====================================

编辑

好吧,更简单的方法是如何将上述意图中的应用程序放入数组列表中,我可以执行 image/* audio/* 等并将它们全部添加到列表中,然后将它们列出在列表视图中,这将解决我的问题问题

【问题讨论】:

  • 您如何确定应用程序是否可以处理该文件?如果您不是自己编写所有这些应用程序,它们必须能够过滤您为未知文件创建的意图。当您调用 startActivity(intentWithUnknownFile); 时,这些应用程序如何知道要过滤的意图;

标签: java android file list


【解决方案1】:

据我所知,android 中没有 API 可以将文件链接到 Windows 中的程序。恐怕你最好的选择是建立一个已知文件类型和链接到它们的程序/android 应用程序的数据库。

【讨论】:

  • 我的基础是根资源管理器,当您单击未知文件时,会出现“打开器”,并且有三个选项卡第三个选项卡列出了应用程序,如邮件、浏览器、文本查看器等所有东西那将能够打开未知文件,基本上试图复制它
【解决方案2】:

好吧,我发现我的问题是我要找的是

    Intent audioIntent = new Intent(android.content.Intent.ACTION_VIEW);
    audioIntent.setDataAndType(Uri.fromFile(Opener.file), "audio/*");
    List<ResolveInfo> audio = packageManager.queryIntentActivities(audioIntent, 0);
    for (ResolveInfo info : audio){
        String label = info.loadLabel(packageManager).toString();
        Drawable icon = info.loadIcon(packageManager);
        String packageName = info.activityInfo.packageName;
        String name = info.activityInfo.name;
        iconlabel.add(a.new HolderObject(label, icon, audioIntent, "audio/*", packageName, name));
    }

但上面代码中的主要内容是 queryIntentActivities 方法解决了我的问题,允许我将这些应用程序添加到列表中

【讨论】:

    【解决方案3】:

    这可以帮助您列出能够打开特定文件的应用程序。

    // extension  : The file extension (.pdf, .docx)
    
    String extension = filePath.substring(filePath.lastIndexOf(".") + 1);
            String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
    
            if (null == mimeType) {
                // Need to set the mimetype for files whose mimetype is not understood by android MimeTypeMap.
                mimeType = "";
            }
            File file = new File(filePath);
            Uri data = Uri.fromFile(file);
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setDataAndType(data, mimeType);
            context.startActivity(Intent.createChooser(intent, "Complete action using"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多