메뉴 건너뛰기

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

하이브리드앱을 만들때 WebView 상에서 작업을 할때,

Net::ERR_UNKNOWN_URL_SCHEME

라는 메세지가 뜨고 전화걸기, 문자보내기 인텐트가 연동이 안될때, 아래의 소스를 참고하고 해결토록 하자.

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

 

WebViewClient 를 상속한 WebViewClientClass 에서 url 이 tel: , sms: , intent: 등의 주소로 들어올때 각각 if문안에

각각 Intent를 띄우는 형태로 처리되어 있다. 


  1. No Image 27Dec
    by
    2018/12/27 Views 4381 

    WebView를 사용할때 HttpClient를 이용한 Session 유지

  2. No Image 28Aug
    by
    2014/08/28 Views 6316 

    WebView 줌 컨트롤러 가리기

  3. No Image 14Dec
    by 조쉬
    2020/12/14 Views 1069 

    WebView 작업할때 Net::ERR_UNKNOWN_URL_SCHEME 에러 발생할때 (전화걸기,문자보내기 안된다)

  4. No Image 14Dec
    by
    2020/12/14 Views 348 

    Volley 이용시에 한글 깨질때 UTF-8로 변경

  5. Volley 로 웹요청하고 응답받기3 - Get방식 , json 읽기 (php,mysql)

  6. Volley 로 웹요청하고 응답받기2 - Post방식 , 로그인-회원가입 (php,mysql 연동)

  7. Volley 로 웹요청하고 응답받기1 - Get방식

  8. Virtual Device , 디자인 화면

  9. ViewFlipper 사용하기

  10. URL을 이용해서 이미지 다운로드 하기 (멀티 쓰레드 이용)

  11. No Image 16Jul
    by
    2015/07/16 Views 7407 

    URL을 이용해서 이미지 다운로드 하기

  12. No Image 14Dec
    by
    2020/12/14 Views 240 

    This Handler class should be static or leaks might occur 시 해결법

  13. No Image 10Jun
    by
    2015/06/10 Views 14235 

    TextureView를 이용한 카메라 Preview 좌우 반전

  14. No Image 31Mar
    by
    2021/03/31 Views 266 

    setContentView()와 레이아웃 전개자(LayoutInflater)

  15. No Image 16Jul
    by
    2015/07/16 Views 6530 

    ScrollView의 활용

  16. No Image 20Oct
    by
    2014/10/20 Views 7361 

    prepend(),append(),before(),after() 메서드

  17. MediaPlayer 클래스 사용법

  18. No Image 11Aug
    by
    2015/08/11 Views 7576 

    manifest 의 launchMode 속성

  19. No Image 16Jul
    by
    2015/07/16 Views 7478 

    ListView 사용시 특정 뷰로 생성 ( 그림 + 텍스트 )

  20. ListView 리스트뷰 연습3 - 커스텀 리스트뷰 (Custom ListView)

Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved