2012-02-19 9 views
1

トレントを検索するアプリケーションを構築しています。したがって、ユーザーが1つを選択すると、ユーザーがインストールしたクライアント(典型的なインテントベースのアクティビティ)を開きたいとします。Androidのインテントの解像度

私のテストマシンでは、私はトランスドロイドをインストールしています。 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が正しくインストールされていることを知っています。トレントファイルがブラウザによってダウンロードされた後、それをクリックしてTransdroidを開くことができるからです。私は(すなわち、それはtransdroidをlauches)この1つは私のために動作するコードのアリのいくつかの作品を試してみました

+0

ここでの回答のいくつかは正しいと考えることができます。おそらくあなたが遭遇した問題は、[this](http://code.google.com/p/transdroid/issues/detail?id=453&colspec=ID%20Type%20Status%20Priority%20Component%20Owner%20Summary%20Reporter%20Stars )。 Transdroid自体はインテントフィルターを正しく定義していないため、すべてのトレントリンクで開くことができませんでした。 –

答えて

0

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"); 

私は知らないが、動作は非常に奇妙です。あなたはどちらかにニーズにリンクファイルが.torrent拡張子を持っているか、MIMEタイプapplication/x軸であることが

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")); 
+0

あなたの答えをありがとう。実際にそれはtransdroidを起動しますが、2つの問題があります:(1)それはリストにトレントを追加しません、そして(2)私はTransdroidを取り除くと、 "no activity found"例外がスローされます。私が本当に望んでいるのは、ユーザがアプリケーション間で選択できるようにすることです。彼がトレントクライアントをブラウザーに戻さない場合は(手動でこのフォールバックを実行する必要があります)。 – erwan

0
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://site.com/tor.torrent"))); 

注:私は2つだけの行を変更した場合たとえば、それはブラウザを起動しますビットトレント。そうしないと、Androidの意図メカニズムがTransdroidの意図と一致することができず、代わりにブラウザが起動されます。ブラウザを使用してファイルをダウンロードして「開く」とすると、Transdroidで開きます。

これで解決しない場合は、動作しないトレントのサンプルURLを入力してください。テントチュー

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 
} 

または使用:することができますアンドロイドresurcesから

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://site.com/tor.torrent"); 
startActivity(Intent.createChooser(i, getString(R.string.some_dialog_title))); 
0

をあなたはTransdoridがまだインストールされていない場合をキャッチしたい場合は

、あなたのような何かを行うことができますインテントが存在するかどうかを確認するメソッドを見つけます。

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); 
} 
関連する問題