Notice
Recent Posts
Recent Comments
Tags
- XSS방어
- 말줄임표시
- 바코드 생성하기
- javascript 유효성체크
- ASP.Net Core 404
- 404에러페이지
- 바코드 스캔하기
- php 캐쉬제거
- ViewBag
- Mac Oracle
- asp.net dropdownlist
- TempData
- django 엑셀불러오기
- SSD 복사
- ViewData
- XSS PHP
- 파일업로드 유효성체크
- asp.net core Select
- jquery 바코드생성
- javascript 바코드스캔
- 타임피커
- 파일업로드 체크
- javascript 바코드 생성
- 하드 윈도우 복사
- 맥 오라클설치
- 하드 마이그레이션
- asp.net Select
- 강제이동
- jquery 바코드
- javascript redirection
웹개발자의 기지개
[Android] WebView 작업할때 Net::ERR_UNKNOWN_URL_SCHEME 에러 발생할때 (전화걸기,문자보내기 안된다) 본문
안드로이드
[Android] WebView 작업할때 Net::ERR_UNKNOWN_URL_SCHEME 에러 발생할때 (전화걸기,문자보내기 안된다)
http://portfolio.wonpaper.net 2020. 7. 31. 06:19하이브리드앱을 만들때 WebView 상에서 작업을 할때,
Net::ERR_UNKNOWN_URL_SCHEME
라는 메세지가 뜨고 전화걸기, 문자보내기 인텐트가 연동이 안될때, 아래의 소스를 참고하고 해결토록 하자.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
private WebView webView1;
protected void onCreate(Bundle savedInstanceState) {
webView1 = (WebView) findViewById(R.id.webView1);
webView1.setWebViewClient(new WebViewClientClass());
// 각종 권한 획득
checkVerify();
}
public void checkVerify() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//카메라 또는 저장공간 권한 획득 여부 확인
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) || ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
Toast.makeText(getApplicationContext(), "권한 관련 요청을 허용해 주셔야 카메라 캡처이미지 사용등의 서비스를 이용가능합니다.", Toast.LENGTH_SHORT).show();
} else if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {
Toast.makeText(getApplicationContext(),"전화걸기 권한을 승인해 주셔야 정상적인 전화걸기 서비스가 가능합니다.",Toast.LENGTH_SHORT).show();
} else {
// 카메라 및 저장공간 권한 요청
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INTERNET, Manifest.permission.CAMERA,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE}, 1);
}
}
}
private class WebViewClientClass extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
//Log.d("WebViewClient URL : " , request.getUrl().toString());
String url = request.getUrl().toString();
if (url.startsWith("tel:")) {
Intent call_phone = new Intent(Intent.ACTION_CALL);
call_phone.setData(Uri.parse(url));
if (checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getApplicationContext(),"전화걸기 권한을 승인해 주셔야 정상적인 전화걸기 서비스가 가능합니다.",Toast.LENGTH_SHORT).show();
return true;
}
startActivity(call_phone);
} else if (url.startsWith("sms:")){
Intent intent = new Intent(Intent.ACTION_SENDTO,Uri.parse(url));
startActivity(intent);
} else if (url.startsWith("intent:")) {
try {
Intent intent = Intent.parseUri(url,Intent.URI_INTENT_SCHEME);
Intent existPackage = getPackageManager().getLaunchIntentForPackage(intent.getPackage());
if (existPackage != null) {
startActivity(intent);
} else {
Intent marketIntent = new Intent(Intent.ACTION_VIEW);
marketIntent.setData(Uri.parse("market://details?id=" + intent.getPackage()));
startActivity(marketIntent);
}
return true;
} catch (Exception e) {
Log.d("shouldOverrideUrlLoading()","intent part Error");
e.printStackTrace();
}
} else {
view.loadUrl(request.getUrl().toString());
}
return true;
//return super.shouldOverrideUrlLoading(view, request);
}
}
|
cs |
WebViewClient 를 상속한 WebViewClientClass 에서 url 이 tel: , sms: , intent: 등의 주소로 들어올때 각각 if문안에
각각 Intent를 띄우는 형태로 처리되어 있다.
'안드로이드' 카테고리의 다른 글
[안드로이드] Intent Scheme Hijacking 보완하기 (0) | 2021.03.09 |
---|---|
[Android] 다음 우편번호 검색창을 팝업띄우지 않고 연결하기 (0) | 2020.07.31 |
[안드로이드] WebView에서 카메라 및 이미지 업로드 (선택적용가능) (7) | 2020.06.29 |
[안드로이드] android.support.v4.content.FileProvider not found (0) | 2020.06.19 |
[안드로이드] Volley 로 웹요청하고 응답받기3 - Get방식 , json 읽기 (php,mysql) (0) | 2020.06.11 |
Comments