2014-09-04 97 views
8

我想在android應用中實現深層鏈接。如何在Android應用上的WebView中啓用深度鏈接?

當我點擊Chrome瀏覽器等Android瀏覽器上的自定義網址(xxxx:// repost?id = 12)的深層鏈接時,我的應用程序打開並運行得非常好。

問題是,在應用程序中,有一個webView小部件,我也想在那裏進行深層鏈接。

目前,它顯示Can't connect to the server錯誤。

在此先感謝。

+0

覆蓋shouldOverrideUrlLoading功能句柄,如果url.startsWith(APP_SCHEME) – mitvenkatesan 2014-12-21 14:27:17

回答

11

這是Android網絡視圖的問題,因爲這會將所有內容視爲URL,但其他瀏覽器(如移動設備上的chrome)會截取該方案,而操作系統將完成剩餘操作以打開相應的應用。 要實現這一點,你需要修改你的Web視圖shouldOverrideUrlLoading功能如下:

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     LogUtils.info(TAG, "shouldOverrideUrlLoading: " + url); 
     Intent intent; 

     if (url.contains(AppConstants.DEEP_LINK_PREFIX)) { 
      intent = new Intent(Intent.ACTION_VIEW); 
      intent.setData(Uri.parse(url)); 
      startActivity(intent); 

      return true; 
     } 
} 

在上面的代碼中有你網站URL方案如更換AppConstants.DEEP_LINK_PREFIX。

Android的應用程序://你的包

希望這有助於!

+0

這是註定要失敗,如果用戶沒有其他的應用程序安裝 – 2016-03-21 14:04:48

+1

這是有關打開深層鏈接爲您的應用程序從您的應用程序Web視圖。請看這個問題?如果有什麼我缺少請詳細說明。 – Pranav 2016-03-23 10:29:47

+3

if(intent.resolveActivity(getPackageManager())!= null) 這將檢查意圖是否可以啓動 – 2016-03-23 11:53:17

0

@pranav的答案很完美,但如果沒有應用程序來處理意圖,可能會導致崩潰。 @ georgianbenetatos的解決方案,以防止自己幫助

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(Uri.parse(url)); 
if (intent.resolveActivity(getPackageManager()) != null) { 
    startActivity(intent); 
} else { 
    Toast.makeText(this, R.string.no_apps_to_handle_intent, Toast.LENGTH_SHORT).show(); 
}