Wou*_*ter 5 android action android-intent
我正在寻找一种方法来测试我是否可以打开某个意图.我知道如何测试一个动作是否可用,如本例所示.然而,这不够好,因为像Intent.ACTION_VIEW这样的动作可能会根据所提供的uri打开不同的应用程序.
以防万一:
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
这将为不同的网址打开不同的应用,例如:
url = "ftp://192.168.1.1"
url = "http://192.168.1.1"
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
所以现在我不仅要测试操作是否可用(如果http可用,链接的代码将返回true,但ftp不返回),还要测试是否有可以处理特定种类的应用程序.
正如@mibollma指示,使用PackageManager
和queryIntentActivities()
提供Intent
您要使用的内容startActivity()
,并使用您的URL.如果queryIntentActivities()
返回一个空列表,则表示没有匹配Intent
.例如,如果没有任何<intent-filter>
支持该ftp
方案,您将获得一个空列表.
对于我的情况,我假设AndFTP作为客户端,因为它似乎是最受欢迎的客户端之一,并且没有标准方法将un/pw发送到客户端,因此这必须是特定于应用程序的
然后不支持FTP.或者,嵌入您自己的FTP支持,而不是依赖于可能不存在的,不兼容的第三方应用程序.
归档时间: |
|
查看次数: |
2430 次 |
最近记录: |