2014-09-04 17 views
8

Próbuję wdrożyć precyzyjne łączenie w aplikacji na Androida.Jak włączyć precyzyjne linki w WebView na Androida?

Po kliknięciu głębokiego linku niestandardowego adresu URL (xxxx: // repost? Id = 12) w przeglądarce Androida, takiej jak Chrome, moja aplikacja otwiera się i działa bardzo dobrze.

Problem polega na tym, że w aplikacji jest widżet webView, a ja również chcę tam pracować.

Obecnie wyświetla błąd Can't connect to the server.

Z góry dziękuję.

+0

Zastąp funkcję shouldOverrideUrlLoading rączkę przez siebie jeśli url.startsWith (APP_SCHEME) – mitvenkatesan

Odpowiedz

11

To jest problem z widokiem z przeglądarki na Androida, ponieważ traktuje wszystko jako adres URL, ale inna przeglądarka, taka jak chrome na komórkach przechwytujących, system i system operacyjny wykonają resztę, aby otworzyć odpowiednią aplikację. Do tego trzeba zmodyfikować zobaczyć web funkcje shouldOverrideUrlLoading następująco wdrożenia:

@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; 
     } 
} 

W powyższym kodzie zastąpić AppConstants.DEEP_LINK_PREFIX z programu url np.

android-app: // pakiet

Nadzieja to pomaga !!

+0

To jest skazane na niepowodzenie, jeśli użytkownik nie posiada druga aplikacja zainstalowana –

+1

Chodzi o otwarcie głęboki związek dla Twojej aplikacji z widoku aplikacji. zobacz pytanie? Jeśli czegoś brakuje, proszę opracuj. – Pranav

+3

if (intent.resolveActivity (getPackageManager())! = Null) Spowoduje to sprawdzenie, czy można rozpocząć działanie –

0

Odpowiedź @pranav jest idealna, ale może spowodować awarię, jeśli nie ma aplikacji do obsługi intencji. @ Rozwiązanie georgianbenetatos do zapobiegania, który pomaga

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(); 
} 
Powiązane problemy