본문 바로가기

android

8. Android WebView 공식문서 공부

챗지피티와 구글 번역기를 사용해서 공부한 내용입니다. 틀린 내용이 있다면 댓글 달아주세요.

 

 

public static interface WebView.FindListener

public abstract void onFindResultReceived (int activeMatchOrdinal, 
                int numberOfMatches, 
                boolean isDoneCounting)
  • onFindResultReceived메서드는 웹 페이지 내에서 텍스트를 검색하고 검색 결과를 처리하는 데 사용되는 콜백 메서드입니다.
  • 사용자는 웹 페이지 내에서 텍스트를 검색하기 위해 검색 키워드를 제공하며
  • onFindResultReceived 메서드는 검색 결과를 제공합니다.
  • 검색 결과를 수신하고 결과를 처리하는 데 사용한다.
  • 매개 변수
    • activeMatchOrdinal
      • 현재 활성 검색 결과의 순서를 나타낸다.
      • 사용자가 검색 결과를 차례로 탐색할 때 어떤 결과가 활성인지를 나타내며 0부터 증가한다.
      • 예를 들어 "Android"라는 검색어로 웹 페이지에서 검색을 수행했고, 그 결과로 5개의 검색결과가 나왔다
      • 처음에는 activeMatchOrdinal 값이 0이다. 이것은 첫번째 검색결과를 가르킨다.
      • 사용자가 다음 검색 결과로 이동하면 activeMatchOrdinal이 1 증가한다.
      • 다음 결과로 이동할 때 마다 activeMatchOrdinal이 증가한다.
    • numberOfMathches
      • 현재까지 찾은 검색 결과의 총 수를 나타냅니다.
      • 이 매개변수는 사용자에게 검색 결과가 몇개인지를 알려주는데 사용됩니다.
    • isDoneCounting
      • 검색 결과가 모두 계산 및 세어진 경우 true이며, 검색 작업이 완료된 것을 나타냄
WebView webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);

// WebView에 FindListener 등록
webView.setFindListener(new WebView.FindListener() {
    @Override
    public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) {
        if (isDoneCounting) {
            if (numberOfMatches > 0) {
                // 텍스트를 찾았을 때의 처리
                // activeMatchOrdinal 및 numberOfMatches를 사용하여 결과 처리 가능
            } else {
                // 텍스트를 찾지 못했을 때의 처리
            }
        }
    }
});

// 특정 텍스트를 찾을 대상으로 설정
String searchText = "Android"; // 찾을 텍스트
webView.findAllAsync(searchText);

 

findAllAsync

public void findAllAsync (String find)

 

  • 지정된 텍스트를 웹 페이지에서 찾아서 하이라이트로 표시하는 역할을 합니다.
  • 이 메서드를 호출하면 해당 텍스트를 찾는 작업이 비동기적으로 수행되며, 찾은 결과에 대한 처리는 FindListener를 통해 이루어집니다.

 

 

findNext()

public void findNext(boolean forward)

 

  • findAllAsync() 메서드를 사용하여 찾은 텍스트 중에서 다음 일치 항목을 하이라이트로 표시하고 페이지를 스크롤합니다.
  • 필요한 경우 페이지 경계를 넘어서 다음 일치 항목을 찾습니다.
  • 이 메서드는 FindListener를 토해 결과를 알립니다.
  • 메서드 설명
    • boolean forward: true로 설정하면 다음 일치 항목을 검색하고 false로 설정하면 이전 일치 항목을 검색합니다.
  • 메서드 동작
    • findNext메서드는 findAllAsync(String) 메서드를 사용하여 찾은 텍스트 중에서 다음 또는 이전 일치 항목을 찾고 해당 항목을 하이라이트로 표시하며 페이지를 스크롤 합니다.
    • forward가 true로 설정된 경우, 다음 일치 항목을 찾습니다. 
    • forward가 false로 설정된 경우, 이전 일치 항목을 찾습니다.
    • 페이지 내에서 검색을 계속하며 페이지 끝에 도달하면 필요한 경우 페이지를 넘어서 검색을 계속합니다. 이로써 페이지 경계를 넘어서 검색을 수행할 수 있습니다.
    • 결과를 findListener를 통해 알립니다. FindListener를 통해 현재의 일치 항목 및 전체 일치 항목 수 등의 정보를 알 수 있습니다.

 

WebView.HitTestResult

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // 사용자가 링크를 클릭했을 때, 해당 링크의 정보를 가져와서 처리
                WebView.HitTestResult result = view.getHitTestResult();
                if (result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) {
                    // 사용자가 링크를 클릭한 경우
                    String linkUrl = result.getExtra();
                    // 이제 linkUrl을 사용하여 원하는 작업 수행 가능
                    // 예: 해당 URL을 다른 액티비티에서 열기
                }

                return false;
            }
        });

        // 웹 페이지 로드
        webView.loadUrl("https://www.example.com");
    }
}
  • 사용자가 WebView내에서 터치한 지점의 유형을 결정하는데 사용된다.
  • Constants
    • int EDIT_TEXT_TYPE : 에디트 텍스트를 터치 했다.
    • int EMAIL_TYPE : 이메일 주소부분을 터치했다.
    • GEO_TYPE : 지도 주소
    • IMAGE_TYPE : HTML::img tag
    • PHONE_TYPE : 핸드폰 번호
    • SRC_ANCHOR_TYPE : src=http가 있는 HTML::a 태그
    • SRC_IMAGE_ANCHOR_TYPE : src=http + HTML::img가 있는 HTML::a 태그
    • UNKNOWN_TYPE : Default값 타겟이 어디있는지 모르겠다.
  • Method
    • String getExtra() : 정보를 가져온다.
    • int getType() : Type을 가져온다.
    • 위의 코드 처럼 사용자가 클릭한 링크를 가져올수도있다.

 

getHitTestResult

public WebView.HitTestResult getHitTestResult ()

 

WebView.VisualStateCallback

 // VisualStateCallback를 사용하여 WebView의 시각적 상태 모니터링
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                view.postVisualStateCallback(0, new VisualStateCallback() {
                    @Override
                    public void onComplete(long timeMs) {
                        // WebView의 시각적 상태 완료 시 동작을 수행
                        // 예: 로딩 프로그레스 숨기기
                    }
                });
            }

 

  • webview가 완료되었는지 확인가능
  • WebViwClient의 onPageFinished()보다 나은 점
    • onPageFinished()는 웹페이지의 로딩이 완료될 때 호출되지만, 페이지의 모든 리소스(이미지, 스크립트, 스타일 등)의 로딩이 완료되는 것을 보장하지 않는다.
    • VisualStateCallback은 웹 페이지의 시각적 상태가 완전히 완료될때 까지 대기한다.
    • 페이지가 시각적으로 준비된 후에 작업을 수행할 수 있다.

 

WebView.WebViewTransport

  • 다른 WebView로 WebView 인스턴스를 전달하거나 이동시킬 때 사용된다.
  • WebView를 다른 View 계층으로 이동하거나 전달할 때 유용하다.
  • Method
    • setWebView(Webview webview)
      • WebView를 WebViewTransport에 설정한다.
      • 이렇게 설정된 WebView는 다른 곳으로 전달되거나 이동된다.
webview.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onCreateWindow(final WebView view, boolean dialog,  
                                                                    boolean userGesture, Message resultMsg)
            {
                WebView newWebView = new WebView(MainActivity.this);
                WebView.WebViewTransport transport 
                              = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(newWebView);
                resultMsg.sendToTarget();

                newWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                        browserIntent.setData(Uri.parse(url));
                        startActivity(browserIntent);
                        return true;
                    }
                });

                return true;
            }

        });

 

autofill()

public void autofill (SparseArray<AutofillValue> values)

 

  • 예를 들어 사용자가 이름, 이메일 주소등을 입력하는 양식이 있다면 autofill메서드를 사용하여 사용자가 이러한 정보를 입력할 때 Autofill Framework가 해당 정보를 저장하고 나중에 다시 자동으로 입력하는데 사용됩니다.
  • values 
    • SparseArray는 key-value쌍을 보유하는 자료구조로, Android에서 자주 사용됩니다. 
    • 이 경우 SparseArray의 키는 사용자가 인터페이스 요소의 ID나 인덱스를 나타내며 값은 해당 요소에 대한 자동완성 값을 나타냅니다.

 

clearCache

public void clearCache (boolean includeDiskFiles)

 

  • 캐쉬를 없앤다.
  • 이 메소드를 사용하면 앱에서 사용하는 모든 앱의 cache가 없어진다.

 

clearClientCertPreferences

public static void clearClientCertPreferences (Runnable onCleared)

 

  • 클라이언트 인증서 요청 진행/취소에 대한 응답으로 저장된 클라이언트 인증서 기본 설정을 지운다.
  • 시스템 키체인이 업데이트 되면 WebView는 이러한 기본 설정을 자동으로 지운다.
  • 기본 설정은 웹뷰앱에서 생성된 모든 WebView에서 공유된다.

 

 

clearFormData

public void clearFormData ()

 

  • 자동완성 팝업을 없앤다.
  • 저장된 데이터를 없애는게 아니다.

 

clearHistory

public void clearHistory ()

 

  • back/forward list를 지운다.

clearSslPreferences

 

public void clearSslPreferences ()

 

  • SSL 인즈어 오류 진행에 대한 응답으로 저장된 SSL 기본 설정 테이블을 지웁니다.

 

computeScroll

 

public void computeScroll ()

 

  • 필요한 경우 자식이 mScrollX 및 mScrollY 값을 업데이트 하도록 요청하기 위해 부모에 의해 호출 됩니다.
  • 이는 일반적으로 자식이 Scroller 개체를 사용하여 스크롤에 애니메이션을 적용하는 경우 수행됩니다.

 

createPrintDocumentAdapter

public PrintDocumentAdapter createPrintDocumentAdapter (String documentName)

 

  • createPrintDocumentAdapter는 PrintDocumentAdapter 객체를 생성한다.
  • 이 메서드는 Android print 프레임워크의 일부로 print를 지원하는 앱에서 컨텐츠를 print하고 관리하는데 사용됩니다.
  • print는 실제 프린트기로 프린트하는 것을 말합니다.
  • 어댑터는 WebView 콘텐츠를 PDF 스트림으로 변환하여 작동합니다.
  • 변환 중에는 WebView를 그릴수 없다.
  • 인쇄에는 전용 오프 스크린 WebView를 사용하는 것이 좋다.
  • 필요한 경우 애플리케이션은 반환된 객체를 감싸는 사용자 정의 PrintDocumentAdapter인스턴스를 사용하고 onStart 및 onFinish 메서드를 관찰하여 표시되는 WebView를 일시적으로 숨길 수 있습니다. 

 

createWebMessageChannel

public WebMessagePort[] createWebMessageChannel ()

 

  • JS와 통신하기 위한 메시지 채널을 생성하고 이 메세지 채널의 끝점을 나타내는 메시지 포트를 반환합니다.
// WebView 설정
WebView webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

// Web Message Channel 생성
WebMessagePort[] channel = webView.createWebMessageChannel();

// 메인 스레드에서 메시지 전송
WebMessagePort mainPort = channel[0];
mainPort.postMessage(WebMessage.create("Message from main thread"));

// Web Worker에서 메시지 수신
WebMessagePort workerPort = channel[1];
workerPort.setOnmessage(new WebMessagePort.OnmessageListener() {
    @Override
    public void onMessage(WebMessage message) {
        // Web Worker에서 메시지를 수신하고 처리
        String messageData = message.getData().toString();
        Log.d("WebWorker", "Received message from main thread: " + messageData);
    }
});

// 웹 페이지 로드
webView.loadUrl("https://www.example.com");

 

  • createWebMessageChannel 메서드를 사용하여 Web Message Channel을 생성합니다.
  • 이 채널에는 두 개의 WebMessagePort가 포함되며, 하나는 메인쓰레드를 나타내고 다른 하나는 WebWorker를 나타냅니다.
  • 메인 스레드에서 메시지를 생성하고 메시지를 mainPort를 통해 WebWorker로 전송합니다.
  • Web Worker는 workerPort를 통해 메시지를 수신하고 이를 처리합니다.
  • 이러한 기능은 복잡한 웹 앱엥서 백그라운드 작업을 수행하고 결과를 메인 스레드로 전달할 때 유용합니다.

 

destroy

public void destroy ()

 

  • 이 WebView의 내부 상태를 삭제한다.
  • 이 메서드는 이 WebView가 뷰 시스템에서 제거된 후에  호출되어야한다.
  • 삭제된 후에는 이 WebView에서 다른 메서드를 호출할 수 없습니다.

 

disableWebView

public static void disableWebView ()

 

  • 현재 프로세스는 WebView를 사용할 의도가 없으며 WebView가 생성되거나 android.webkit 패키지의 다른 메서드가 사용되는 경우 예외가 발생해야함을 나타냅니다.
  • 여러 프로세스가 있는 어플리케이션은 WebView가 필요하지 않은 수명이 긴 프로세스에서 WebView를 초기화하는데 실수로 메모리 사용량이 발생하는 것을 방지하고 잠재적인 데이터 디렉터리 충돌을 방지하기 위해 WebView를 사용하지 않는 프로세스에서 이를 호출할 수 있습니다.
  • 예를 들어 액티비티를 위한 하나의 프로세스와 재생 서비스를 위한 또 다른 프로세스가 있는 오디오 플레이어 애플리케이션은 재생서비스의 Service.onCreate()에서 메서드를 호출할 수 있습니다.

 

 

dispatchKeyEvent

public boolean dispatchKeyEvent (KeyEvent event)

 

  • 키 이벤트를 현재 포커스경로에 따라 다음 뷰로 전달하는 역할을 한다.
  • 이 메서드는 키 이벤트를 현재 포커스된 뷰에서 시작하여 뷰 계층 구조를 따라 내려가면서 이벤트를 전달한다.
  • 이 메서드는 또한 뷰에 등록된 키 이벤트 리스너를 호출한다.
  • 메서드 동작
    • 현재 뷰가 포커스를 가지고 있으면, 이 메서드는 해당 뷰로 키 이벤트를 전달합니다.
    • 이때, 뷰에 등록된 키 이벤트 리스너가 호출될 수 있습니다.
    • 현재 뷰가 포커스를 가지고 있지 않으면, 이 메서드는 현재뷰의 부모 또는 상위 뷰로 키 이벤트를 전달합니다. 이를 통해 포커스 경로를 따라 다음뷰로 이벤트가 전달됩니다.
    • 포커스 경로를 따라 이벤트가 전달되면, 각 뷰에서 이벤트가 처리되거나 무시될수 있습니다. 처리 방식은 뷰의 속성및 등록된 리스너에 따라 다를 수 있습니다.

 

documentHasImages

public void documentHasImages (Message response)

 

  • 웹 문서가 이미지를 포함하는지 여부를 확인하기 위한 메서드 입니다.
  • 메서드 동작
    • documentHasImages 메서드가 호출되면 WebView는 현재 로드된 웹 페이지나 문서를 분석하여 이미지 참조 여부를 확인합니다.
    • 이미지를 참조하는 경우, Messgae 객체의 arg1 속성이 1로 설정됨 참조하지 않으면 0으로 설정된다.

 

enableSlowWholeDocumentDraw()

public static void enableSlowWholeDocumentDraw ()

 

  • Android 5.0을 타겟팅하는 앱에서 WebView는 HTML 문서의 일부를 그리는 메모리 사용량을 줄이고 성능을 향상시키는 새로운 기본 동작을 가집니다.
  • 이러한 최적화는 대부분의 경우에는 개발에게는 투명하며, WebView는 자동으로 필요한 부분만 그립니다.
  • 그러나 특정 상황에서 개발자는 이러한 최적화를 비활성화 하고 전체 HTML 문서를 그리도록 설정하려고 할 수 있습니다.
  • enableSlowWholeDocumentDraw 메서드를 호출하면 WebView가 전체 HTML 문서를 그리도록 설정된다.
  • 사용 사례
    • onDraw(Canvas)를 사용하여 자체 그리기를 수행하고 페이지의 가시 영역을 크게 벗어나는 페이지 일부에 엑세스해야하는 경우

 

evaluateJavascript()

public void evaluateJavascript(String script, ValueCallback<String> resultCallback)

 

  • evaluateJavaScript()메서드는 안드로이드 WebView 클래스에서 사용되는 메서드로, 현재 표시된 웹 페이지의 컨텍스트에서 JavaScript코드를 비동기적으로 실행합니다.
  • JavaScript 코드의 실행 결과가 있다면, 지정된 resultCallback 콜백을 통해 결과를 반환합니다.
  • 이 메서드는 반드시 UI 쓰레드에서 호출되어야한다. 또한 결과 콜백도 UI 쓰레드에서 호출된다.
  • Android 7.0이상을 타겟팅 하는 앱의 경우, 빈 WebView에서의 JavaScript tkdxork loadUrl 메서드를 통한 페이지 전환 간에 더이상 유지되지 않는다.
  • 즉, loadUrl() 메서드를 사용하여 페이지를 로드하기 전에 정의한 전역 변수 및 함수는 로드된 페이지에서 존재하지 않는다.
  • 이러한 경우에는 addJavaScriptInterface 메서드를 사용하여 javaScript 객체를 페이지 전환 간에 유지할 수 있다.

 

findFocus

public View findFocus ()

 

  • 현재 포커스를 가지고 있는 뷰를 찾기 위해 뷰 계층 구조에서 탐색하는데 사용된다.
  • 메서드 동작
    • 이 메서드는 현재 화면에 표시되는 뷰 계층 구조(root view에서 시작)를 탐색하여 포커스를 가지고 있는 뷰를 찾습니다.
    • 포커스를 가지고 있는 뷰를 찾으면 그 뷰를 반환합니다. 만약 현재 화면에 포커스를 가지고 있는 뷰가 없다면 null을 반환합니다.
    • 이 메서드를 호출하면 현재 화면에서 어떤 뷰가 포커스를 가지고 있는지 확인 할 수 있습니다.
    • 이는 사용자 인터페이스상의 포커스 이동과 관련된 작업을 수행하는데 유용하며, 현재 포커스를 가지고 있는 뷰에 대한 조작을 수행하고자 할 때 유용하게 활용됩니다.

 

getAccessibilityClassName

public CharSequence getAccessibilityClassName ()

 

  • 객체의 클래스 이름을 반환하는 역할을 합니다.
  • 이 메서드를 오버라이드하여 객체가 접근성 기능을 위해 새로운 뷰 클래스로 처리되어야 하는 경우 사용됩니다.
    • 접근성(Accessibility)은 장애가 있는 개인이 다양한 환경에서 정보와 기능에 쉽게 접근할 수 있도록 디자인된 컴퓨터 시스템을 가리키는 용어입니다.
    • 접근성은 장애를 가진 사용자, 노인, 저시력자, 청각 장애자 및 기타 다양한 그룹에게 정보 및 서비스를 더 효과적으로 제공하기위해 중요한 개념
  • Button 클래스에서 상속받은 경우, getAccessibilityClassName() 메서드를 오버라이드 하지 않으면 상위 클래스인 Button의 기본 동작을 따르게 된다.
  • 일반적으로 안드로이드의 뷰 클래스는 자체적인 클래스 이름을 가지고 있고, 이 클래스 이름은 기본적으로 뷰의 클래스 명과 관련이 있다.
  • 그러나 경우에 따라 특정 뷰가 접근성 기능을 위해 다른 클래스로 처리되어야 할 때 이 메서드를 오버라이드하여 새로운 클래스 이름을 반환할 수 있다.
  • 접근성 기능을 사용하는 사용자에게 특정 뷰가 새로운 뷰 클래스로 인식되어야하는 상황에서 이 메서드를 오버라이드하여 원하는 클래스 이름을 반환하면, 접근성 서비스는 해당 뷰를 새로운 클래스의 뷰로 처리합니다. 
  • 예를 들어 특정 커스텀 뷰가 접근성 기능을 사용하는 사용자에게 기본 뷰 클래스와 다르게 보여야하는 경우, getAccessibilityClassName을 오버라이드하여 해당 뷰를 새로운 클래스로 처리하도록 할 수 있습니다.
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Button;

public class CustomAccessibilityButton extends Button {

    public CustomAccessibilityButton(Context context) {
        super(context);
    }

    public CustomAccessibilityButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public CharSequence getAccessibilityClassName() {
        // 이 메서드를 오버라이드하여 커스텀 클래스 이름을 반환
        return "CustomAccessibilityButton";
    }

    // 다른 뷰와 관련된 로직 및 메서드

    // 이하 생략
}

 

  • CustomAccessibility 클래스의 경우 만약 getAccessibilityClassName 메서드를 오버라이드 하지 않으면 접근성 기능을 사용하는 사용자에게 이 버튼은 CustomAccessibilityButton 클래스로 인식되지 않고 기본 Button 클래스로 인식 될 것 입니다.

 

getAccessibilityNodeProvider()

public AccessibilityNodeProvider getAccessibilityNodeProvider ()
  • 이 메서드는 Android 뷰 객체에 대한 접근성 노드 프로바이더를 반환하는 메서드입니다.
  • 이 메서드는 접근성 서비스가 화면 콘텐츠를 탐색하고 이해하는데 도움이 되는 가상 뷰 트리를 관리하는 데 사용된다.
  • 만약 이 메서드가 어떤 객체를 반환한다면, 해당 객체는 다음과 같은 역할을 담당한다.
    • 이 뷰를 루트로 하는 가상 뷰 트리를 관리한다. 이 트리는 실제화면에 표시되는 뷰와 별개로, 접근성 서비스를 통해 접근성 정보를 제공한다.
    • 이 가상 뷰트리에 속한 노드들의 접근성 정보를 관리하고 반환한다. 이정보는 사용자가 앱 내에서 뷰와 상호작용할 때  필요합니다.
    • 가상 뷰 또는 루트 뷰에 대한 접근성 동작을 수행합니다. 사용자가 화면 읽기, 터치 제스처 등의 동작을 요청할 때 이 객체를 통해 처리됩니다.
  • 뷰에서 getAccessibilityNodeProvider()를 구현하여 접근성 정보를 사용자 정의하고 확장할 수 있습니다.

 

getCertificate

public SslCertificate getCertificate ()

 

  • 주 최상위 페이지에 대한 SSL 인증서를 가져오거나 인증서가 없는 경우 null(사이트가 안전하지 않음)을 가져온다.

 

getContentHeight

public int getContentHeight ()

 

  • HTML 콘텐츠에 height를 가져온다.

 

getCurrentWebViewPackage

public static PackageInfo getCurrentWebViewPackage ()

 

  • 이 메서드는 현재 프로세스에서 WebView가 로드되어 있는 경우 해당 WebView를 로드한 패키지를 반환하고
  • WebView가 현재 프로세스에 로드되지 않은 경우 로드된다면 어떤 패키지가 사용될 것인지를 반환합니다.
  • 이 메서드를 호출하는 것으로 WebView를 로드하거나 변경하지는 않습니다. 따라서 이 정보는 언제든지 오래된 정보가 될 수 있습니다.
  • WebView 패키지는 다음과 같은 경우에 변경될 수 있다.
    • 현재 WebView 패키지가 업데이트되는 경우
    • WebView 패키지가 비활성화되거나 제거되는 경우
    • 개발자 설정을 통해 WebView 패키지가 변경되는 경우
  • WebView 패키지가 변경되면 WebView를 로드한 앱 프로세스가 종료됩니다. 앱이 다시 시작되고 WebView를 로드하는 경우, 새로운 WebView 패키지가 사용된다.

 

getFavicon

public Bitmap getFavicon ()

 

  • 이 메서드는 WebView에서 현재 페이지의 파비콘 이미지를 가져오는 데 사용된다.
  • 파비콘은 웹페이지의 아이콘으로 주로 웹브라우저 탭에서 페이지를 식별하는 데 사용됩니다.
  • 이 메서드를 호출하면 현재 페이지의 파비콘 이미지를 반환합니다.
  • 단, 이 메서드는 현재 페이지의 파비콘 이미지를 반환하며, WebViewClient.onReceivedIcon 메서드가 호출되기 전까지의 파비콘을 제공합니다. 즉, WebViewClient.onReceivedIcon에서 새로운 파비콘 이미지를 수신할 때 까지 이전 파비콘을 반환합니다.

 

 

getHandler

public Handler getHandler ()

 

  • 이 메서드는 Android에서 View의 UI 스레드와 관련된 Handler 객체를 반환합니다.
  • Handler는 스레드 간 통신 및 작업 스케줄링에 사용되는 클래스로, UI스레드에서 실행되는 작업을 지연시키거나 다른 스레드로 메시지를 보낼 때 유용합니다.
  • getHandler를 사용하여 View의 UI스레드에 연결된 Handler를 얻을 수 있다.
  • 이 Handler를 사용하여 UI스레드에서 실행되는 작업을 스케줄링 하거나 다른 스레드에서 UI 스레드로 메시지를 보낼 수 있다.

 

getOriginalUrl

public String getOriginalUrl ()

 

  • 현재 페이지에 대한 원래 URL을 반환한다.
  • 이 원래 URL은 항상 WebViewClient.onPageStarted에 전달된 URL과 동일한 것은 아닙니다.
  • 웹뷰가 리디렉션 되었을 때는 리디렉션 되기 전에 url을 반환한다.

 

getProgress

public int getProgress ()

 

  • 현재 페이지의 로딩 진행 상태를 백분율로 반환한다.

 

getRenderedPriorityWaiveWhenNotVisible

public boolean getRendererPriorityWaivedWhenNotVisible ()

 

  • 이 메서드는 WebView가 화면에 표시 되지 않을때 RENDERER_PRIORITY_WAIVED 우선 순위를 요청하는지 여부를 반환합니다.
    • RENDERER_PRIORITY_WAIVED는 WebView에서 사용되는 렌더링 우선 순위 레벨중 하나이다. 이 레벨은 렌더링 우선 순위 중에서 낮은 우선 순위를 나타낸다.
    • 따라서 WebView가 화면에 표시되지 않을 때 RENDERER_PRIORITY_WAIVED 우선 순위를 요청하는 경우 시스템은 렌더링 작업을 상대적으로 덜 중요하게 처리합니다.
    • 만약 WebView가 화면에 표시되지 않는 경우에도 렌더링 우선 순위를 요청하고 싶다면 이 메서드가 true를 반환하게 설정할 수 있습니다.

 

getRendererRequestedPriority

public int getRendererRequestedPriority ()

 

  • 이 메서드는 WebView가 요청한 렌더러(렌더링 엔진) 우선 순위를 반환합니다. 이 메서드는 WebView가 현재 어떤 우선 순위를 요청하고 있는지 확인하는데 사용됩니다.
  • 이 메서드는 이러한 우선 순위중 하나를 반환합니다.
  • 앱에서 이 값을 확인하여 WebView가 요청하는 우선순위를 이해하고 필요한 조치를 취할 수 있습니다.
  • 이를 통해 렌더링 우선 순위를 조절하고 성능 및 리소스 관리를 최적화 할 수 있습니다.
  • WebView가 요청할 수 있는 렌더러 우선 순위
    • RENDERER_PRIORITY_WAIVED
      • WebView가 화면에 표시되지 않을 때 요청하는 우선 순위입니다. 
      • 이 경우 WebView의 렌더링 작업은 다른 중요한 작업에 비해 덜 중요하게 처리될 수 있습니다.
    • RENDERER_PRIORITY_BOUND
      • WebView가 현재 화면에 표시되는 경우 요청하는 우선 순위입니다.
      • 화면에 보이는 WebView의 렌더링은 다른 화면 요소에 비해 더 중요하게 처리됩니다.
    • RENDERER_PRIORITY_IMPORTANT
      • WebView가 중요한 컨텐츠를 렌더링할 때 요청하는 우선 순위입니다.
      • 이 경우 WebView의 렌더링 작업이 매우 중요하게 처리됩니다.

 

getSafeBrowsingPrivacyPolicyUrl

public static Uri getSafeBrowsingPrivacyPolicyUrl ()

 

  • 이 메서드는 safe Browsing 보고에 대한 개인 정보 보호 정책(privacy policy) 문서의 URL을 반환합니다.
  • Safe Browsing
    • 사용자를 악성 웹사이트나 위험한 웹 콘텐츠로 부터 보호하기 위한 구글 서비스 중 하나이다.
    • 이 서비스를 사용하면 WebView는 웹 사이트를 방문할 때 해당 사이트가 악성 코드를 포함하거나 사용자를 공격하는 위험한 콘텐츠를 제공하는지 확인한다.
    • 사용자가 이러한 위험에 노출된 경우, WebView는 사용자를 경고하거나 차단할 수 있으며, 필요한경우 Safe Browsing 서비스에 문제를 보고 합니다.
  • 앱이 Safe Browsing을 사용하는 경우, 사용자에게 보고된 위험 사항 및 개인 정보 보호 정책에 대한 정보를 제공해야합니다.
  • 이 메서드는 앱에서 이러한 정보를 표시하기 위해 사용할 수 있는 개인 정보 보호 정책 문서의 URL을 제공합니다.

 

getSettings

public WebSettings getSettings ()

 

  • 이 WebView에 대한 설정을 제어하는데 사용되는 WebSettings 개체를 가져옵니다.

 

getTextClassifier

public TextClassifier getTextClassifier ()

 

  • Added in API level 27
  • 이 메서드는 WebView에서 사용되는 TextClassifier를 반환합니다.
  • TextClassifier : 텍스트와 관련된 작업을 수행하며 텍스트의 내용을 분석하고 분류합니다.

 

getTitle

public String getTitle ()

 

  • 현재 페이지의 제목을 가져옵니다.
  • WebViewClient.onReceivedTitle이 호출 되기전 까지 현재 페이지의 제목입니다.

 

getUrl

public String getUrl ()

 

  • 현재 페이지의 URL을 가져옵니다.
  • 이는 WebViewClient.onPageStarted에 전달된 URL과 항상 동일하지는 않습니다.
  • 해당 URL에 대한 로드가 시작되었더라도 현재 페이지가 변경되지 않았을 수도 있기 때문

 

 

getWebChromeClient

public WebChromeClient getWebChromeClient ()

 

  • 이 메서드는 WebView의 chrome handler, 즉 WebChromeClient 객체를 반환 합니다.

 

getWebViewClassLoader

public static ClassLoader getWebViewClassLoader ()
  • Added in API level 28
  • 내부 WebView 클래스를 로드하는 데 사용된 ClassLoader를 반환 합니다.
  • 이 메서드는 WebView 지원 라이브러리에서 사용하기 위한 것이므로 이 메서드를 사용할 이유가 없습니다. 

 

 

getWebViewClient

public WebViewClient getWebViewClient ()

 

  • Added in API level 26
  • WebViewClient를 가져온다.

 

getWebViewLooper

public Looper getWebViewLooper ()

 

  • Added in API level 28
  • 이 메서드는 WebView의 호출이 발생하는 스레드에 해당하는 Looper를 반환합니다.
  • Looper
    • 안드로이드에서 스레드 간 메시지 전달 및 처리를 관리하는 데 사용되는 중요한 구성 요소 입니다.
    • WebView는 다양한 작업을 수행하고 웹 콘텐츠를 로드하는 동안 다른 스레드와 통신해야할 수 있습니다.
    • 따라서 WebView의 작업은 WebView가 실행 중인 스레드에서 처리해야 합니다.
requestFocus(View.FOCUS_DOWN)

 

  • WebView에 초점을 맞춘다.
  • View.FOCUS_DOWN은 특정방향으로 초점을 이동하는데 사용된다.
isFocusable = true
isFocusableInTouchMode = true

 

  • 웹뷰가 포커스를 받을 수 있도록 설정한다.
  • 터치모드에서도 포커스를 받을 수 있다.
setNetworkAvailable(true)

 

  • 네트워크가 사용 가능함을 WebView에 알린다.
setInitialScale(100)

 

  • WebView의 초기 확대/축소 비율을 설정합니다.
  • 100은 기본 비율을 의미한다.
isScrollbarFadingEnabled = true
isVerticalScrollBarEnabled = true
isHorizontalScrollBarEnabled = true
isScrollContainer = false
overScrollMode = OVER_SCROLL_NEVER

 

  • 스크롤바 설정을 합니다.
  • 스크롤바가 사라지는 것을 허용
  • 수직 및 수평 스크롤바를 활성화
  • 오버스크롤하지 않도록 설정
 setLayerType(View.LAYER_TYPE_HARDWARE, null)

 

  • 렌더링 성능을 향상시키기 위해 하드웨어 가속을 시작한다.
setWebContentsDebuggingEnabled(true)

 

  • 디버그 모드에서 웹 컨텐츠 디버깅을 활성화 한다.