2011-08-13 37 views
13

我有一個應用程序有時鏈接到imdb。我可以使用http://m.imdb.com/find或者imdb:///find。我的麻煩是我找不到方法來檢查imdb://是否可用。檢查意圖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