我正在构建一个搜索种子的应用程序。因此,当用户选择一个时,我想打开用户已安装的客户端(典型的基于意图的活动)。
在我的测试机器上,我安装了transdroid。 Transdroid以这种方式声明其意图: http://code.google.com/p/transdroid/source/browse/android/AndroidManifest.xml
我以这种方式启动活动:
final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);
虽然我认为这应该有效但是浏览器会启动。该URL是一个直接URL,以“torrent”结尾,因此它应与Transdroid的过滤器匹配。
我也尝试使用type="application/x-bittorrent"
设置了setDataAndType,但我得到一个例外“找不到处理意图的活动”。
我知道Transdroid已正确安装,因为浏览器下载了torrent文件后,我可以点击它并打开Transdroid。
答案 0 :(得分:0)
我尝试了一些代码,这个代码对我来说很有用(也就是说它是transdroid):
Intent i = new Intent(Intent.ACTION_VIEW);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("http://releases.ubuntu.com/lucid/ubuntu-10.04.3-alternate-amd64.iso.torrent"));
i.setType("application/x-bittorrent");
我不知道,但行为很奇怪。例如,如果我只更改两行,则启动浏览器:
Intent i = new Intent(Intent.ACTION_VIEW);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setType("application/x-bittorrent");
i.setData(Uri.parse("http://releases.ubuntu.com/lucid/ubuntu-10.04.3-alternate-amd64.iso.torrent"));
答案 1 :(得分:0)
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://site.com/tor.torrent")));
请注意,您链接到的文件需要具有.torrent扩展名或者是mime类型的application / x-bittorrent。否则,Android的意图机制无法与Transdroid的Intent之一匹配,而是启动浏览器。如果您随后使用浏览器下载文件并“打开”它,它将打开Transdroid。
如果这不起作用,请告诉我们一个不起作用的torrent的示例网址。
如果您想了解尚未安装Transdorid的情况,您可以执行以下操作:
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://site.com/tor.torrent");
if (context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) > 0) {
startActivity(i);
} else {
// Alert that Transdroid is not available and link to the installer
}
或使用Intent选择器:
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://site.com/tor.torrent");
startActivity(Intent.createChooser(i, getString(R.string.some_dialog_title)));
答案 2 :(得分:0)
从android resurces,你可以找到一种检查意图是否存在的方法。
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
这是一个如何使用Barcode Scanner意图使用它的示例。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
final boolean scanAvailable = isIntentAvailable(this,
"com.google.zxing.client.android.SCAN");
MenuItem item; item = menu.findItem(R.id.menu_item_add);
item.setEnabled(scanAvailable);
return super.onPrepareOptionsMenu(menu);
}