【问题标题】:Launching an Activity based on a file in android基于android中的文件启动Activity
【发布时间】:2011-09-14 08:40:00
【问题描述】:

我正在开发一个列出文件夹中文件的应用程序(在 ListView 中)。当用户单击其中一个项目时,如果它是一个文件,那么我想启动一个可以处理它的活动(如果有的话),或者如果没有则显示某种错误消息。

我该怎么做?当然不是全部,但我如何确定哪些应用程序可以处理文件(如果有的话)。

【问题讨论】:

  • 还有很多其他类似的帖子,但没有具体内容,也没有回答我的问题,所以在将其标记为重复之前,请仔细阅读其他帖子。

标签: android android-intent mime-types


【解决方案1】:

基于...

我如何确定哪些应用程序可以处理文件(如果有)?

我认为您想要的是PackageManager.queryIntentActivities,您可以在其中根据目标文件创建一个意图,然后读取返回的列表。

【讨论】:

    【解决方案2】:

    首先,您需要确定文件的 MIME 类型。您可以使用MimeTypeMap

    MimeTypeMap map = MimeTypeMap.getSingleton();
    String extension = map.getFileExtensionFromUrl(url); // url is the url/location of your file
    String type = map.getMimeTypeFromExtension(extension);
    

    然后,一旦您知道 MIME 类型,您就可以为该类型创建一个意图:

    Intent intent = new Intent();
    intent.setType(type);
    

    最后,您要检查是否有任何活动可以解决该类型的意图。这可以通过PackageManager

    PackageManager manager = getPackageManager(); // I'm assuming this is done from within an activity. This a Context method.
    List<ResolveInfo> resolvers = manager.queryIntentActivities(intent, 0);
    if (resolvers.isEmpty()) {
      // display error
    } else {
      // launch the intent. You will also want to set the data based on the uri of your file
    }
    

    【讨论】:

    • 我试过这个,它适用于一些扩展,如'pdf'和'doc',但是当我使用'JPG'时它给了我一个很长的无意义列表;它显示了系统工具,例如 GPS 作为可以处理“JPG”的应用程序。还有其他建议吗?
    • PackageManager 中还有一个 getPreferredActivities() 方法,您可以利用该方法来确定是否存在处理特定 MIME 类型的首选应用程序,否则,这是预期的 android 行为。
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2016-07-05
    • 2013-04-08
    相关资源
    最近更新 更多