我正在尋找一種方法來測試我是否可以打開某個意圖。我知道如何測試一個動作是否可用,如in this example。但是,這不夠好,因爲像Intent.ACTION_VIEW這樣的操作可能會根據uri的不同提供不同的應用程序。測試是否有意圖
點的情況下:
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url);
startActivity(i);
這將打開不同的網址,比如不同的應用:
url = "ftp://192.168.1.1"
url = "http://192.168.1.1"
的HTTP URL是非常安全:將在默認的Web瀏覽器中打開。 ftp url不是這樣的,因爲它不能確定用戶是否安裝了ftp客戶端(對於我的情況,我假設AndFTP作爲客戶端,因爲它似乎是最受歡迎的客戶端之一,並且沒有標準的發送方式/ pw給客戶端,所以這必須是應用程序特定的)。
所以現在我想測試不僅如果行動是可用的(鏈接的代碼將返回true,如果http可用但ftp不是),而且是否有一個應用程序可以處理特定的品種。測試特定的應用程序也是可以接受的。
最後,這應該被合併到一段代碼中,該代碼可以從一個或多個URI中進行選擇,這應該會打開第一個URI,如果沒有URI可以打開,則返回一個錯誤代碼。事情是這樣的僞代碼:
success = false;
for (Uri uri : uris) {
if (actionAvailable(uri)) {
// set up intent
startActivity(intent);
success = true;
break;
}
}
return success;
我不太明白這個問題。意圖過濾器應該表明他們是否支持http或ftp,所以我認爲你發佈的第一個示例方法應該工作或不這樣做? http://developer.android.com/guide/topics/manifest/data-element.html#scheme – mibollma
問題是要做一個適當的測試,以確定意圖是否可用並得到處理。 Intent.ACTION_VIEW處理ftp和http(以及更多)。在startActivity上捕獲錯誤不是要走的路。 – Wouter