2012-03-06 28 views
7

我遇到問題。蔭使用下面的代碼來interupt鏈接到我的應用程序作爲指向我的應用的鏈接

<intent-filter> 
    <action android:name="android.intent.action.VIEW"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <category android:name="android.intent.category.BROWSABLE"/> 
    <data android:scheme="http" android:host="twitter.com"/> 
    <data android:scheme="http" android:host="facebook.com"/> 
</intent-filter> 

但問題是,我需要在運行時也就是我可以添加或刪除在運行時,主機設置數據方案和主機。所以請有人幫助我設定數據方案,並在runtime.I主機的價值正在使用下面的代碼,但它不工作

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.intent.action.VIEW"); 
filter.addCategory("android.intent.category.DEFAULT"); 
filter.addCategory("android.intent.category.BROWSABLE"); 
filter.addDataScheme("http"); 
filter.addDataAuthority("www.facebook.com", null); 
RecieveBroadcaster receiver = new RecieveBroadcaster(); 
registerReceiver(receiver, filter); 
+0

可以請一個人幫我 – saba 2012-03-06 10:08:38

+0

我已經得到了這個答案,所以如果有人需要幫助。 ACTION.VIEW是一項活動操作。因此我們無法將其註冊到廣播接收器。由於意圖過濾器不能在運行時設置(除了廣播接收器的情況)。而廣播接收機可以只重播像android.intent.action.PHONE_STATE這樣的廣播動作。因此註冊ACTION> VIEW是不允許的,廣播接收者將永遠不會對其做出響應。 – saba 2012-03-07 10:13:21

回答

4

嚴格地說,對應於ACTION_VIEW字符串是活動動作按照慣例 ;事實上,您將其放入清單中的activityintent-filter元素中,使其成爲它是一個活動操作!系統代表您的應用程序監聽這些信息,這基本上就是您爲什麼不自己監聽它們的原因。 Context.startActivity()方法生成這些Intent s。

意向解析的規則實際上決定了一個特定的Intent是否匹配任何IntentFilter。對於活動意圖,可能會有多個匹配項,並且通常會顯示「選擇器」界面,因此用戶可以選擇一個目標。

有三個Intent 「流」 永不交叉:startActivity()sendBroadcast()startService()。這些都是通過Context中的方法啓動的,並且各自分別具有特定目標ActivityBroadcastReceiverService

這是一個簡單的事情成立了BroadcastReceiver(不ReceiveBroadcaster你甚至嘗試這個代碼嗎?),讓你感興趣的事件,然後使用Context.startActivity()Intent你想要的。您甚至可以使用自定義操作,所以您知道它是由接收方觸發的,而不是用戶觸發的。

唯一的問題是:有沒有可以安排接收的廣播事件?您可以註冊一個系統事件,或者您可以通過Context.sendBroadcast()自己生成一個自定義事件。

請記住,您可以檢查傳入的Intent您的活動開始於「前進」相同或修改爲Intent,如果它不完全符合您的要求。正如您正確確定的那樣,您不能動態更改活動的一組IntentFilter,因此您必須檢查每個請求的主機。

請記住,您也可以在清單中註冊接收者,並讓系統自動調用該實現。