我正在寻找一种方法来测试我是否可以打开某个意图。我知道如何测试一个动作是否可用,如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作为客户端,因为它似乎是最受欢迎的客户端之一,并且没有标准的发送方式/ pw给客户端,所以这必须是应用程序特定的)。
所以现在我想测试不仅如果行动是可用的(链接的代码将返回true,如果http可用但ftp不是),而且是否有一个应用程序可以处理特定的品种。测试特定的应用程序也是可以接受的。
最后,这应该被合并到一段代码中,该代码可以从一个或多个URI中进行选择,这应该会打开第一个URI,如果没有URI可以打开,则返回一个错误代码。事情是这样的伪代码:
success = false;
for (Uri uri : uris) {
if (actionAvailable(uri)) {
// set up intent
startActivity(intent);
success = true;
break;
}
}
return success;
我不太明白这个问题。意图过滤器应该表明他们是否支持http或ftp,所以我认为你发布的第一个示例方法应该工作或不这样做? http://developer.android.com/guide/topics/manifest/data-element.html#scheme – mibollma
问题是要做一个适当的测试,以确定意图是否可用并得到处理。 Intent.ACTION_VIEW处理ftp和http(以及更多)。在startActivity上捕获错误不是要走的路。 – Wouter