2012-01-23 18 views
1

我已經使用意向過濾器爲我的應用程序設置了自定義URL方案。當我的WebView中的URL更改爲我的自定義方案(mockup:// pagechange)時,intent篩選器正確地篩選了我的應用程序的意圖,啓動了我的活動的新實例。然而,我真正想要發生的是意圖過濾器在現有活動內部運行一段代碼,而不是啓動一項新活動。這是可能的,如果是這樣,我該如何設置?如果沒有,當我的WebView中的URL改變爲以'mockup'開始的任何東西時,如何完成運行代碼的任務的任何其他想法?在不啓動新活動的情況下在URL更改(自定義方案)上運行代碼

我試圖在意圖過濾器中使用其他操作,但我試過(RUN和ATTACH_DATA)導致「網頁不可用」頁面在URL更改時顯示在我的WebView中。此外,我在這裏找到的所有意圖過濾器/自定義方案問題都涉及如何使用自定義方案開始一個帶有網址的新活動 - 這使得很難搜索相反的結果。

謝謝!

回答

1

我最終擺脫了意圖過濾器模式 - 我已經爲我的WebView設置了一個WebViewClient來處理在我的WebView中加載外部鏈接,所以我只是在那裏設置一個標誌來運行我的代碼,正在裝載包含了我要找的定製方案:

WebView wv = (WebView) findViewById(R.id.app_container); 
// [other setup] 
wv.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) 
     { 
      if(!url.contains("mockup://")) 
       view.loadUrl(url); 
      else { 
       // run "mockup"-specific code 
      } 
      return true; 
     } 
    }); 
1

首先,在清單中添加android:launchMode="singleTop"您的活動聲明。在你的意圖使用標誌FLAG_ACTIVITY_CLEAR_TOP。你會在onNewIntent()回調中獲得意圖。

請記住,在onNewIntent()中傳遞的意圖與在getIntent()中返回的意圖不同。如果您在代碼的其他部分使用getIntent(),請使用onNewIntent()的intent中的setIntent。

+0

的launchMode選項當然似乎像什麼,我想做的事情(不啓動活動的新實例,而只是調用一個方法 - onNewIntent在()這個案例)。但我在哪裏設置標誌?我沒有明確地創建一個新的活動,我試圖將我的WebView上的URL更改的動作捕獲到自定義方案 - 從未實際設置代碼中的Intent對象。 –

+0

你當然是對的。只需創建一個新的活動,其唯一目的是開始其他活動。因此,在新的活動中,不要顯示任何用戶界面,只需在處理意圖後調用startActivity並將其轉發給您的單個頂級活動即可。 – dhaag23

相關問題