android

8. Android WebView 공식문서 공부

코코넛딩 2023. 11. 4. 13:43

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

 

 

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)

 

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