Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android에서 WebView의 URL 로드 완료 시점을 감지하는 방법

이 예제는 Android 앱에서 WebView가 URL 로드를 완료하는 시점을 감지(Listening)하는 방법을 보여줍니다. WebViewClient의 onPageFinished() 콜백과 WebChromeClient의 onProgressChanged() 콜백을 활용하면 페이지 로딩 진행률과 완료 여부를 손쉽게 확인할 수 있습니다.

1단계: 새 프로젝트 생성

Android Studio에서 File ⇒ New Project로 이동한 후, 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.

2단계: 레이아웃 파일 작성

다음 코드를 res/layout/activity_main.xml에 추가합니다.

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="4dp"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:textColor="#000000"
        android:padding="5dp" />
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/textView"/>
    <Button
        android:id="@+id/btnLoad"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Load URL"
        android:layout_alignParentBottom="true"/>
</RelativeLayout>

이 레이아웃은 로딩 상태를 표시할 TextView, 웹페이지를 표시할 WebView, 그리고 URL을 불러오는 Button으로 구성되어 있습니다.

3단계: MainActivity 작성

다음 코드를 src/MainActivity.java에 추가합니다.

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
    WebView webView;
    TextView textView;
    Button btnLoad;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        btnLoad = findViewById(R.id.btnLoad);
        webView = findViewById(R.id.webView);
        webView.setWebViewClient(new WebViewClient());
        btnLoad.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webView.setWebViewClient(new WebViewClient() {
                    public void onPageFinished(WebView view, String weburl) {
                        Toast.makeText(MainActivity.this, "Your WebView is Loaded....", Toast.LENGTH_LONG).show();
                    }
                });
                webView.setWebChromeClient(new WebChromeClient() {
                    public void onProgressChanged(WebView view, int newProgress) {
                        textView.setText("Page loading : " + newProgress + "%");
                        if (newProgress == 100) {
                            textView.setText("Page Loaded.");
                        }
                    }
                });
                webView.loadUrl("https://www.tutorialspoint.com");
            }
        });
    }
}

핵심 포인트는 다음과 같습니다:

  • onPageFinished(): WebView가 해당 URL의 로드를 완료하면 호출됩니다. 이 예제에서는 로드 완료 시 Toast 메시지를 표시합니다.
  • onProgressChanged(): 페이지 로딩 진행률이 변경될 때마다 호출되며, 진행률이 100%에 도달하면 "Page Loaded."라는 텍스트를 표시합니다.

4단계: 매니페스트 설정

다음 코드를 androidManifest.xml에 추가합니다. 인터넷 권한(INTERNET) 선언이 반드시 필요합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

애플리케이션 실행하기

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 모바일 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바에서 Run 아이콘을 클릭하세요. 옵션 목록에서 자신의 모바일 기기를 선택하면, 기기 화면에 아래와 같은 기본 화면이 표시됩니다.

Android에서 WebView의 URL 로드 완료 시점을 감지하는 방법

Android에서 WebView의 URL 로드 완료 시점을 감지하는 방법

버튼을 눌러 URL을 로드하면 하단의 TextView에 로딩 진행률이 표시되고, 로드가 완료되면 Toast 메시지로 로드 완료를 알려주는 것을 확인할 수 있습니다.