티스토리 뷰

안드로이드 웹뷰에 대해서 한번 정리했었는데요.. 

안드로이드 웹뷰(WebView) 사용하기

안드로이드 웹뷰에서 뒤로가기 버튼 처리 - 웹페이지 리다이렉트 경우

웹에서 액티비티 호출하기


웹뷰를 사용하다보면 카카오링크와 같이 인텐트로 외부 앱을 모바일에서 실행하는 경우가 있습니다. 

폰에 내장된 브라우저에서는 잘 되는데, 안드로이드 4.4. SDK부터 Chrominum 기반으로 웹뷰가 변경되면서 웹뷰에서 인텐트를 지원하지 않는 이슈가 있습니다. 



인텐트를 지원하도록 WebViewClient를 상속한 함수에서 shouldOverrideUrlLoading 메소드를 다음과 같이 수정하면 됩니다. 


  1. private class MyWebViewClient extends WebViewClient {  
  2.         public static final String INTENT_PROTOCOL_START = "intent:";  
  3.         public static final String INTENT_PROTOCOL_INTENT = "#Intent;";  
  4.         public static final String INTENT_PROTOCOL_END = ";end;";  
  5.         public static final String GOOGLE_PLAY_STORE_PREFIX = "market://details?id=";  
  6.   
  7.         @Override  
  8.         public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  9.             if (url.startsWith(INTENT_PROTOCOL_START)) {  
  10.                 final int customUrlStartIndex = INTENT_PROTOCOL_START.length();  
  11.                 final int customUrlEndIndex = url.indexOf(INTENT_PROTOCOL_INTENT);  
  12.                 if (customUrlEndIndex < 0) {  
  13.                     return false;  
  14.                 } else {  
  15.                     final String customUrl = url.substring(customUrlStartIndex, customUrlEndIndex);  
  16.                     try {  
  17.                         getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(customUrl)));  
  18.                     } catch (ActivityNotFoundException e) {  
  19.                         final int packageStartIndex = customUrlEndIndex + INTENT_PROTOCOL_INTENT.length();  
  20.                         final int packageEndIndex = url.indexOf(INTENT_PROTOCOL_END);  
  21.   
  22.                         final String packageName = url.substring(packageStartIndex, packageEndIndex < 0 ? url.length() : packageEndIndex);  
  23.                         getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));  
  24.                     }  
  25.                     return true;  
  26.                 }  
  27.             } else {  
  28.                 view.loadUrl(url);    
  29.                 return true;   
  30.             }  
  31.         }  
  32.     }  



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함