Android 에서 WebView 는 하이퍼링크 를 클릭 하여 QQ 를 시작 하 는 방법 을 실현 합 니 다.

머리말
전에 면접 을 봤 을 때 면접 관 은 WebView 에서 하이퍼링크 를 클릭 하여 타 입 QQ 와 유사 한 제3자 응용 프로그램 을 시작 하 는 방법 을 물 었 습 니 다.제 대답 은 WebView 로 js 와 상호작용 을 할 수 있다 는 것 이 었 습 니 다.면접 관 이 듣 고 아무 말 도 하지 않 았 으 니 답 은 그 가 원 하 는 것 이 아 닐 것 이다.오늘 은 원래 이렇게 실현 할 수 있다 는 것 을 발견 하고 기록 해 보 세 요.
사고의 방향 을 실현 하 다.
웹 개발 에서 QQ 를 시작 할 때 세 션 을 URL 로 연결 할 수 있 습 니 다.

<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes" rel="external nofollow" >  QQ</a>
20178888 을 당신 의 QQ 번호 로 바 꾸 면 됩 니 다.안 드 로 이 드 폰 의 일부 브 라 우 저 에서 도 정상적으로 호출 될 수 있다.
그러나 웹 뷰 를 사용 하여 웹 페이지 를 보 여 주 려 면 페이지 에 위의 링크 가 포함 되 어 있 지만 QQ 를 제대로 시작 할 수 없습니다.
웹 뷰 에서 setWebView Client 방법 을 다시 불 러 올 수 있 습 니 다.

 mWebView.setWebViewClient(new WebViewClient() {
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }
  });
이렇게 하면 웹 뷰 의 하이퍼링크 가 실행 되면 웹 뷰 는 기본 브 라 우 저 대신 불 러 옵 니 다.

http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes
이 링크 는 우리 가 보기에 이것 은 매우 정상 적 인 http 요청 인 것 같 습 니 다.패키지 캡 처 를 통 해 호출 된 QQ 는 http 요청 을 한 번 만 하 는 것 이 아니 라 실제 적 으로 도 이러한 요청 을 보 냈 습 니 다.mqqwpa://im/chat시작의
mqqwpa://이 부분의 URL 부분 을 URL 의 sechme 부분 이 라 고 합 니 다.
이곳 은 왜 텐 센트 응용 보 홈 페이지 에 뛰 어 들 었 는 지 이해 하기 쉽다.http://wpa.qq.com/텐 센트 응용 보 의 홈 페이지 입 니 다.첫 번 째 요청 입 니 다.
이 어 다시 요청 한 프로 토 콜 은 http 가 아니 라mqqwpa://im/chat。
실제로 QQ 를 호출 한 것 은mqqwpa://im/chat이 때 우 리 는 원본 QQ 를 호출 하기 위해 Intent 를 사용 해 야 합 니 다.
우 리 는 이러한 url 을 캡 처 해 야 합 니 다.일반 웹 페이지 를 만나면 Webview 에 맡 기 고 정상 적 인 절 차 를 밟 아야 합 니 다.mqqwpa 로 시작 하 는 것 을 만나면 기본 브 라 우 저 에 맡 깁 니 다.
이렇게 해서 WebView 가 하이퍼링크 를 클릭 하여 QQ 문 제 를 시작 하면 해 결 됩 니 다.
다음은 실현 방식 을 살 펴 보 자.
사실 우 리 는 shouldInterceptRequest 방법 을 다시 불 러 와 다른 sechme 처 리 를 캡 처 하면 됩 니 다.

webView.setWebViewClient(new WebViewClient() {
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }

   @Override
   public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if (url.startsWith("http") || url.startsWith("https")) { //http https            
     return super.shouldInterceptRequest(view, url);
    } else { //   URL      Acitity       APP
     Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     startActivity(in);
     return null;
    }
   }
  });
전체 코드:

  mWebView = (ProgressWebView) findViewById(R.id.baseweb_webview);
  mWebView.getSettings().setJavaScriptEnabled(true);
  String url ="http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes";
  mWebView.loadUrl(url);
  mWebView.setWebViewClient(new WebViewClient() {
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }

   @Override
   public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if (url.startsWith("http") || url.startsWith("https")) { //http https            
     return super.shouldInterceptRequest(view, url);
    } else { //   URL      Acitity       APP
     Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     startActivity(in);
     return null;
    }
   }
  });
실행 효과

총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 안 드 로 이 드 개발 자 들 에 게 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기