티스토리 뷰
안드로이드 웹뷰에 대해서 한번 정리했었는데요..
안드로이드 웹뷰에서 뒤로가기 버튼 처리 - 웹페이지 리다이렉트 경우
웹뷰를 사용하다보면 카카오링크와 같이 인텐트로 외부 앱을 모바일에서 실행하는 경우가 있습니다.
폰에 내장된 브라우저에서는 잘 되는데, 안드로이드 4.4. SDK부터 Chrominum 기반으로 웹뷰가 변경되면서 웹뷰에서 인텐트를 지원하지 않는 이슈가 있습니다.
인텐트를 지원하도록 WebViewClient를 상속한 함수에서 shouldOverrideUrlLoading 메소드를 다음과 같이 수정하면 됩니다.
- private class MyWebViewClient extends WebViewClient {
- public static final String INTENT_PROTOCOL_START = "intent:";
- public static final String INTENT_PROTOCOL_INTENT = "#Intent;";
- public static final String INTENT_PROTOCOL_END = ";end;";
- public static final String GOOGLE_PLAY_STORE_PREFIX = "market://details?id=";
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- if (url.startsWith(INTENT_PROTOCOL_START)) {
- final int customUrlStartIndex = INTENT_PROTOCOL_START.length();
- final int customUrlEndIndex = url.indexOf(INTENT_PROTOCOL_INTENT);
- if (customUrlEndIndex < 0) {
- return false;
- } else {
- final String customUrl = url.substring(customUrlStartIndex, customUrlEndIndex);
- try {
- getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(customUrl)));
- } catch (ActivityNotFoundException e) {
- final int packageStartIndex = customUrlEndIndex + INTENT_PROTOCOL_INTENT.length();
- final int packageEndIndex = url.indexOf(INTENT_PROTOCOL_END);
- final String packageName = url.substring(packageStartIndex, packageEndIndex < 0 ? url.length() : packageEndIndex);
- getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GOOGLE_PLAY_STORE_PREFIX + packageName)));
- }
- return true;
- }
- } else {
- view.loadUrl(url);
- return true;
- }
- }
- }
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 프래그먼트를 활용한 탭 만들기 (0) | 2015.06.30 |
---|---|
안드로이드 웹뷰에서 뒤로가기 버튼 처리 - 웹페이지 리다이렉트 경우 (0) | 2015.06.17 |
안드로이드 인트로 화면 만들기 (0) | 2015.06.08 |
안드로이드 스튜디오 버전 설정, 아이콘 생성 그리고 릴리즈 빌드하기 (0) | 2015.05.29 |
이미지로 제공하는 안드로이드 실시간 검색어 앱 추천~ (0) | 2015.05.23 |
댓글