@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (!request.getUrl().toString().startsWith("http://") && !request.getUrl().toString().startsWith("https://") && !request.getUrl().toString().startsWith("javascript:")) {
Intent intent = null;
try {
intent = Intent.parseUri(request.getUrl().toString(), Intent.URI_INTENT_SCHEME);
Uri uri = Uri.parse(intent.getDataString());
startActivity(new Intent(Intent.ACTION_VIEW, uri));
return true;
} catch (URISyntaxException ex) {
return false;
} catch (ActivityNotFoundException e) {
if (intent == null)
return false;
String packageName = intent.getPackage();
if (packageName != null) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
return true;
}
return false;
}
}
return super.shouldOverrideUrlLoading(view, request);
}
그 동안 로딩되는 url에서 인텐트가 포함 되어 있는 경우 url을 잘라서 사용하는 경우가 있었는데
롤리팝 이후 버전부터는 WebResourceRequest를 사용해서 간단하게 구현이 가능한 것 같다.
위 코드 처럼 "http://" "https://" "javascript:" 로 시작하지 않는 url 주소에 대해서는 인텐트에 해당하는 앱을 실행하거나 앱이 없다면 플레이스토어로 연동 시켜준다.
'안드로이드' 카테고리의 다른 글
[안드로이드]앱 시작할 때 검은화면, 하얀화면 없애기(인트로 이미지 빠르게 띄우기) (0) | 2019.03.14 |
---|---|
[android]Glide v4 캐시 삭제(이미지 갱신 안 됨) (0) | 2019.02.18 |