测试意图是否可用

时间:2011-07-04 16:01:11

标签: android android-intent action

我正在寻找一种方法来测试我是否可以打开某个意图。我知道如何测试某个操作是否可用,如in this example。然而,这不够好,因为像Intent.ACTION_VIEW这样的动作可能会根据所提供的uri打开不同的应用程序。

以防万一:

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url);
startActivity(i);

这将为不同的网址打开不同的应用,例如:

url = "ftp://192.168.1.1"
url = "http://192.168.1.1"

http url非常安全:它将在默认的Web浏览器中打开。 ftp url不是这样,因为它不确定用户是否安装了ftp客户端(对于我的情况,我假设AndFTP作为客户端,因为它似乎是最受欢迎的客户端之一,并且没有标准的方式来发送un / pw到客户端所以这必须是应用程序特定的。)

所以现在我不仅要测试操作是否可用(如果http可用,链接的代码将返回true,但ftp不返回),还要测试是否有可以处理特定种类的应用程序。对特定应用程序的测试也是可以接受的。

最后,这应该包含在一段代码中,该代码可以从中选择一个或多个URI,这应该打开第一个可能的URI,如果没有URI可以打开则返回错误代码。像这样的伪代码:

success = false;
for (Uri uri : uris) {
   if (actionAvailable(uri)) {
        // set up intent
        startActivity(intent);
        success = true;
        break;
    }
}
return success;

1 个答案:

答案 0 :(得分:9)

  

所以现在我不仅要测试操作是否可用(如果http可用,链接的代码将返回true,但不是ftp),还要测试是否有可以处理特定种类的应用程序。

正如@mibollma指示的那样,使用PackageManagerqueryIntentActivities(),为Intent提供您要与startActivity()一起使用的queryIntentActivities(),并附上您的网址。如果Intent返回空列表,则表示该<intent-filter>没有匹配项。例如,如果没有任何ftp支持{{1}}方案,您将获得一个空列表。

  

对于我的情况我假设AndFTP作为客户端,因为它似乎是最受欢迎的客户端之一,并且没有标准方法将un / pw发送到客户端,因此这必须是特定于应用程序的

然后不支持FTP。或者,嵌入自己的FTP支持,而不是依赖于可能不存在的,不兼容的第三方应用程序。