2011-07-04 6 views
5

私はあるインテントを開くことができるかどうかをテストする方法を探しています。私は、アクションがin this exampleのように利用可能かどうかをテストする方法を知っています。しかし、Intent.ACTION_VIEWのようなアクションは、提示されたURIに応じて異なるアプリケーションを開く可能性があるため、十分ではありません。場合インテントが利用可能かどうかのテスト

ポイント:

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

のHTTP URLはかなり安全である:デフォルトのWebブラウザで開きますこと

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

これは以下のような、異なるURLの異なるアプリを開きます。 。 ftpのURLはそうではありません。ユーザーにはftpクライアントがインストールされているかどうかわかりません(私のケースでは、AndFTPはクライアントとして想定されています。最も一般的なクライアントのようです。/pwをクライアントに送信するため、これはアプリ固有のものでなければなりません)。

ここでは、アクションが利用可能であるかどうか(httpが利用可能な場合はリンクされたコードはtrueを返しますが、ftpは使用できません)だけでなく、特定の種類を処理できるアプリがあるかどうかをテストしたいと思います。特定のアプリのテストも受け入れられます。

最後に、これは、1つ以上のURIを選択できるコードに組み込む必要があります。これにより、可能な限り最初のコードを開き、URIを開くことができない場合はエラーコードを返します。この擬似コードのようなもの:だから今

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

私はこの問題をよく理解していません。インテントフィルタは、httpやftpをサポートしているかどうかを示す必要があります。投稿した最初のメソッドのメソッドはうまくいくと思いますか? http://developer.android.com/guide/topics/manifest/data-element.html#scheme – mibollma

+0

問題は、インテントが利用可能で、処理されているかどうかを適切にテストすることです。 ftpとhttp(さらに多くのもの)は、Intent.ACTION_VIEWによって処理されます。 startActivityのエラーをキャッチすることは、方法ではありません。 – Wouter

答えて

8

私がテストしたいだけではなく、アクションが使用可能な場合だけでなく、かどうか、(HTTPが利用可能ですが、FTPでない場合はリンクされたコードは、trueを返します)特定の品種に対応できるアプリがあります。 @mibollmaが示すように

、それあなたがあなたのURLと完全startActivity()、で使用するIntent供給PackageManagerqueryIntentActivities()を、使用しています。 queryIntentActivities()が空のリストを返す場合は、それに一致するものがないことがわかりますIntent。たとえば、ftpスキームをサポートする<intent-filter>がない場合は、空のリストが表示されます。

私のケースでは、クライアントとしてAndFTPが最も一般的なクライアントのように見えますが、クライアントにun/pwを送信する標準的な方法はありません

次に、FTPをサポートしません。おそらく存在しない互換性のないサードパーティのアプリに頼るのではなく、独自のFTPサポートを埋め込むことができます。

+0

ファイル転送の場合、FTPクライアントは通常、Webブラウザよりもはるかに優れています。それで、私はftpオプションを提供したいのですが、サポートされているftpクライアントが利用できない場合は、http(組み込みのWebブラウザで利用できることが保証されています)に戻ってしまいます。 – Wouter

+0

@Wouter:おそらく存在しない、互換性のないサードパーティのアプリに頼るのではなく、独自のFTPサポートを埋め込む。 – CommonsWare

関連する問題