Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड WebView में आंतरिक पेज नेविगेशन कैसे अनुमति दें?

एंड्रॉइड WebView में आंतरिक पेज नेविगेशन अनुमति देना

यह उदाहरण दर्शाता है कि WebViewClient का उपयोग करके WebView के अंदर लिंक क्लिक पर बाहरी ब्राउज़र खुलने के बजाय उसी WebView में पेज लोड कैसे करें।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में नया प्रोजेक्ट बनाएं।

चरण 2: लेआउट फ़ाइल

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

चरण 3: MainActivity.java

package com.example.myapplication;

import android.app.ProgressDialog;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView webView;

    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("लोड हो रहा है...");
        progressDialog.setCancelable(false);

        webView = findViewById(R.id.web_view);
        webView.setVerticalScrollBarEnabled(true);
        webView.requestFocus();
        webView.canGoForward();
        
        WebSettings settings = webView.getSettings();
        settings.setDefaultTextEncodingName("utf-8");
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setSupportZoom(true);
        settings.setBuiltInZoomControls(true);
        settings.setDisplayZoomControls(false);
        
        // कुकीज़ इनेबल करें (लॉगिन के लिए महत्वपूर्ण)
        CookieManager.getInstance().setAcceptCookie(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
        }

        webView.loadUrl("https://touch.facebook.com/");

        // आंतरिक नेविगेशन के लिए WebViewClient
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // सभी URL को इसी WebView में लोड करें
                view.loadUrl(url);
                return true; // true = हम हैंडल करेंगे, ब्राउज़र नहीं खुलेगा
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                // पेज लोड पूरा होने पर कुकीज़ सिंक करें
                CookieManager.getInstance().flush();
            }

            @Override
            public void onReceivedError(WebView view, int errorCode, 
                    String description, String failingUrl) {
                super.onReceivedError(view, errorCode, description, failingUrl);
                // एरर हैंडलिंग
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int progress) {
                if (progress < 100) {
                    progressDialog.show();
                }
                if (progress == 100) {
                    progressDialog.dismiss();
                }
            }
        });
    }

    // बैक बटन हैंडलिंग - WebView हिस्ट्री में पीछे जाएं
    @Override
    public void onBackPressed() {
        if (webView != null && webView.canGoBack()) {
            webView.goBack(); // पिछला पेज खोलें
        } else {
            super.onBackPressed(); // कोई पिछला पेज नहीं तो ऐप बंद करें
        }
    }
}

चरण 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <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>
                
                
            </intent-filter>
        </activity>
    </application>
</manifest>

मुख्य बिंदु

  • shouldOverrideUrlLoading() में return true और view.loadUrl(url) - लिंक इसी WebView में खुलते हैं
  • onBackPressed() ओवरराइड करके WebView हिस्ट्री नेविगेशन इनेबल करें
  • कुकीज़ इनेबल करना लॉगिन/सेशन के लिए आवश्यक
  • canGoBack() और goBack() से हिस्ट्री नेविगेशन

उन्नत: बाहरी लिंक्स को ब्राउज़र में खोलें

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // अपने डोमेन के लिंक्स WebView में, बाकी ब्राउज़र में
    if (url.startsWith("https://touch.facebook.com/") || url.startsWith("https://m.facebook.com/")) {
        view.loadUrl(url);
        return true;
    } else {
        // बाहरी लिंक - ब्राउज़र में खोलें
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
}

ऐप चलाएं

फेसबुक मोबाइल खुलेगा - लिंक क्लिक करने पर उसी WebView में नेविगेट होगा, बैक बटन से वापस जा सकेंगे।

एंड्रॉइड WebView में आंतरिक पेज नेविगेशन कैसे अनुमति दें?

  1. Android WebView में फॉन्ट फेस कैसे बदलें? Android WebView में फॉन्ट फेस कैसे बदलें?

    WebView में कस्टम फॉन्ट लोड करने के लिए एसेट्स फोल्डर में HTML/CSS और फॉन्ट फ़ाइल रखने का तरीका। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट में WebView res/layout/activity_main.xml: <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=https

  1. Android में URL एन्कोड कैसे करें? Android में URL एन्कोड कैसे करें?

    परिचय यह ट्यूटोरियल दिखाता है कि Android में URL एन्कोडिंग कैसे करें। स्पेशल कैरेक्टर्स (स्पेस, हिंदी टेक्स्ट, सिम्बल्स) को URL-सेफ फॉर्मेट में बदलने के लिए URLEncoder क्लास का उपयोग करते हैं। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project से नया प्रोजेक्ट बनाएं। चरण

  1. Android पर आंतरिक ऑडियो कैसे रिकॉर्ड करें Android पर आंतरिक ऑडियो कैसे रिकॉर्ड करें

    Android फोन में आमतौर पर बॉक्स से बाहर आंतरिक संवाद रिकॉर्ड करने के लिए अंतर्निहित विधि नहीं होती है। सैमसंग डिवाइस ने Android 7 और नए फोन पर आंतरिक रिकॉर्डिंग पेश की, और हाल ही में, Xiaomi MIUI 10 (Android 8) पर आंतरिक ऑडियो के साथ स्क्रीन रिकॉर्डिंग की अनुमति देता है। यह उन डिवाइस की एक छोटी सूची