2011-08-13 19 views
13

私は時々imdbにリンクするアプリを持っています。私はhttp://m.imdb.com/findまたはそれが利用可能な場合imdb:///findでこれを行うことができます。私の問題は、遅すぎる前にimdb://が利用可能かどうかを確認する方法を見つけることができないということです。intent uriが利用可能かどうかを確認してください

リンクがユーザーによってクリックされているため、android.content.ActivityNotFoundExceptionの例外をキャッチできません。

明らかなものがありませんか?


ソリューション:inazarukの提案により、

私は今follwingコードを使用しています:

public static boolean isUriAvailable(Context context, String uri) { 
    Intent test = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); 
    return context.getPackageManager().resolveActivity(test, 0) != null; 
} 

方法は、あなたのよう、要求しているものに直接URIで呼び出さなければなりませんimdb:///findではなく、imdb://となります。

+0

はIMDBの活動からデータを取得することが可能ですか?映画の評価や他の評価を得ることは素晴らしいことです。 –

答えて

14

resolveActivity()を使用して、あなたの意図を処理できるシステムにActivityが存在するかどうかを検出できます。もちろん、あなたは "uri"クリックを模倣する意図を構築する必要があります。それはIntent.setData()関数を使って行うことができますが、私は自分自身でテスト/検証しませんでした。

+0

私は 'Intent test = new Intent(Intent.ACTION_VIEW、Uri.parse(" imdb:// find "));' 'getPackageManager()。resolveActivity(test、0);'を試みましたが、 adbログの記述 –

+0

ログには記載されていない可能性があります。ただし、独自のログを追加することもできます。 'resolveActivity()'から 'ResolveInfo'インスタンスで返された情報を自分で印刷するだけです。 – inazaruk

+0

ありがとう、私はそれが例外をスローするつもりだと思った。魅力のように動作します。 –

0

私のために働いた後:

Intent intent = new Intent(); 
    intent.setAction("android.intent.action.VIEW"); 
    Uri uri = Uri.parse("imdb:///title/tt1457767/"); 
    intent.setData(uri); 
    this.getActivity().startActivity(intent); 

あなたは、以下のいずれかとUri.parse("");で文字列を置き換えることができます。

  imdb:///name/<nameID> 
      imdb:///find?q=<search_query> 
      imdb:///title/<titleID> 
      imdb:///boxoffice 
      imdb:///name/<nameID> 
      imdb:///find?q=toystory 
関連する問題