simulateur de téléphone Andrews

[Dix pour cent Emblem: XSX1346 continuellement mis à jour] [] [] [grande variété de choisis au hasard] [assurance qualité]

Donc, avant d'ouvrir les besoins d'application pour détecter ce réseau, si elle est côté web, il ne peut pas détecter un réseau, donc envisager l'application de package Android utilisant H5 WebView il.

1, configurer les droits de connexion réseau

 

Dans le fichier AndroidManifest.xml, ajoutez les informations de configuration suivante

<Utilisations-permission android: name = "android.permission.INTERNET" />

Note: A partir de Android 9.0 (niveau API 28), est désactivé par défaut à l'appui de texte brut. Ainsi, l'URL http ne sont pas chargés dans le WebView, de sorte que les informations de configuration ci-dessus peut entraîner net :: erreur ERR_CLEARTEXT_NOT_PERMITTED, vous devez également ajouter la configuration suivante dans le fichier de configuration de l'application. Se référant à l'article: net :: ERR_CLEARTEXT_NOT_PERMITTED

 

android: usesCleartextTraffic = "true"

webView configuration de réseau anormale

net :: ERR_CLEARTEXT_NOT_PERMITTED 配置

2, créez un fichier de mise en page

Utilisez idée, puis crée automatiquement MainActivity et le fichier de mise en page correspondante, modifier directement sur la base du fichier, le contrôle de l'utilisation Webview, si vous avez besoin d'utiliser la barre de progression, puis, la configuration ProgressBar peut l'ouvrir.

 

<? Xml version = "1.0" encoding = "utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout

        xmlns: android = "http://schemas.android.com/apk/res/android"

        xmlns: Outils = "http://schemas.android.com/tools"

        xmlns: app = "http://schemas.android.com/apk/res-auto"

        android: layout_width = "match_parent"

        android: layout_height = "match_parent"

        Outils: contexte = "com.ctjsoft.jxf.shop.MainActivity">

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

    <- <ProgressBar android: layout_width = "match_parent" android: layout_height = "match_parent" android: id = "@ + id / barre de progression"

                 style = "@ android: le style / Widget.ProgressBar.Horizontal" android: max = android "100": progress = "0"

                 android: visibilité = "gone" /> ->

</Androidx.constraintlayout.widget.ConstraintLayout>

3, modifier le fichier MainActivity

Remplacer la méthode onCreate:

 

onCreate vide protégé (@Nullable Bundle savedInstanceState) {

        super.onCreate (savedInstanceState);

        setContentView (R.layout.activity_main);

        // progressBar = (ProgressBar) findViewById (R.id.progressbar); // barre de progression

 

        webView = (WebView) findViewById (R.id.webview);

        webView.getSettings () setAllowUniversalAccessFromFileURLs (vrai).

        webView.getSettings () setAllowFileAccessFromFileURLs (vrai).

        // configuration WebView ajoutez le code suivant

        try {

            if (Build.VERSION.SDK_INT> = 16) {

                Classe clazz = webView.getSettings () getClass () <?>.

                Procédé Method = clazz.getMethod ( "setAllowUniversalAccessFromFileURLs", boolean.class);

                si (méthode! = null) {

                    method.invoke (webView.getSettings (), true);

                }

            }

        } Catch (e IllegalArgumentException) {

            e.printStackTrace ();

        } Catch (e NoSuchMethodException) {

            e.printStackTrace ();

        } Catch (e IllegalAccessException) {

            e.printStackTrace ();

        } Catch (e InvocationTargetException) {

            e.printStackTrace ();

        }

        //webView.loadUrl("http://172.17.1.176:8082/");// url de chargement

        webView.loadUrl (API);

 

        // afficher le code HTML en utilisant WebView

// webView.loadDataWithBaseURL (null, "<html> <head> <title> 欢迎 您 </ title> </ head>" +

// "<body> <h2> 使用 WebView 显示 html 代码 </ h2> </ body> </ html>", "text / html", "utf-8", null);

 

        webView.addJavascriptInterface (cela, « android »); // ajouter les auditeurs de cette html seront en mesure d'appeler le client

        webView.setWebChromeClient (webChromeClient);

        webView.setWebViewClient (webViewClient);

        WebSettings webSettings = webView.getSettings ();

        / **

         * LOAD_CACHE_ONLY: ne pas utiliser le réseau, en lecture seule les données du cache local

         * LOAD_DEFAULT: (par défaut) pour décider de récupérer les données du réseau conformément à cache-contrôle.

         * LOAD_NO_CACHE: ne pas utiliser le cache, pour obtenir des données du réseau.

         * LOAD_CACHE_ELSE_NETWORK, tant qu'il est local, que ce soit arrivé à expiration ou non-cache, utilisez les données dans le cache.

         * /

        webSettings.setCacheMode (WebSettings.LOAD_DEFAULT); // ne pas utiliser le cache, seules les données acquises à partir du réseau.

        webView.getSettings () setTextZoom (100).;

webView.getSettings () setJavaScriptCanOpenWindowsAutomatically (true) ;. // js ensemble peut ouvrir une fenêtre, comme le window.open (), par défaut est false

        webView.getSettings () setJavaScriptEnabled (true) ;. // d'autoriser ou non js d'exécution, par défaut est false. Réglé vrai, il rappellera la cause des vulnérabilités XSS

        webView.getSettings () setSupportZoom (true) ;. // peut effectuer un zoom, par défaut

        webView.getSettings () setBuiltInZoomControls (true) ;. // si vous souhaitez afficher le bouton de zoom, le faux par défaut

        webView.getSettings () setUseWideViewPort (true) ;. // définir cette propriété, il peut être arbitrairement mis à l'échelle. Mode Grande vue

        webView.getSettings () setLoadWithOverviewMode (true) ;. // et setUseWideViewPort (true) pour résoudre le problème avec des pages d'adaptation

        . WebView.getSettings () setAppCacheEnabled (true); // si vous souhaitez utiliser le cache

        . WebView.getSettings () setDomStorageEnabled (true); // DOM Storage

    }

  `` `

configuration WebviewClient

// WebViewClient principales notifications de processus WebView d'aide, événement de demande

WebViewClient privé webViewClient = new WebViewClient () {

    @Passer outre

    public void onPageFinished (vue WebView, String url) {// chargement de la page

        //progressBar.setVisibility(View.GONE);

    }

 

    public void onPageStarted (vue WebView, String url, Bitmap favicon) {// page commence le chargement

        //progressBar.setVisibility(View.VISIBLE);

    }

 

    @RequiresApi (api = Build.VERSION_CODES.LOLLIPOP)

    @Passer outre

    shouldOverrideUrlLoading public boolean (vue WebView, demande WebResourceRequest) {

        Log.i ( "Ansen", "拦截 url:" + request.getUrl ());

        retour super.shouldOverrideUrlLoading (voir, demande);

    }

 

};

 

// WebChromeClient traitement secondaire majeur boîte de dialogue Javascript WebView, le logo, le titre du site, comme la progression du chargement

WebChromeClient privé webChromeClient = new WebChromeClient () {

    // ne prennent pas en charge js la pop d'alerte, de sorte que vous devez écouter puis à travers la pop dialogue

    onJsAlert public boolean (WebView webView, String url, String message, résultat JsResult) {

        AlertDialog.Builder localBuilder = new AlertDialog.Builder (webView.getContext ());

        localBuilder.setMessage (message) .setPositiveButton ( "确定", NULL);

        localBuilder.setCancelable (false);

        localBuilder.create () montrer ().

 

        // Note:

        // Ce doit être un code: result.confirm () a dit:

        // résultat du traitement pour déterminer l'état de fils simultanément réveiller WebCore

        // ou ne peut pas continuer à cliquer sur le bouton

        result.confirm ();

        return true;

    }

 

    // Obtenez le titre de la page

    @Passer outre

    onReceivedTitle public void (vue WebView, titre String) {

        super.onReceivedTitle (vue, titre);

        Log.i ( "Ansen", "titre de la page:" + titre);

    }

 

    // progression du chargement de rappel

    @Passer outre

    public void onProgressChanged (vue WebView, int newProgress) {

        // ProgressBar.setProgress (newProgress);

    }

};

 

@Passer outre

public boolean onKeyDown (int codeTouche, événement KeyEvent) {

    Log.i ( "Ansen", "Y at-il une page:" + webView.canGoBack ());

    si (webView.canGoBack () && codeTouche == KeyEvent.KEYCODE_BACK) {// cliquez sur le bouton Retour quand il n'y a pas de jugement précédent

        webView.goBack (); // goBack () représente le retour de la page précédente webView

        return true;

    }

    retourner super.onKeyDown (keyCode, événement);

}

 

/ **

 * Méthode appel JS android

 *

 * @Param Cycle

 * @revenir

 * /

@JavascriptInterface // encore essentiel

getClient public void (String str) {

Je suppose que tu aimes

Origine www.cnblogs.com/jsbjsh/p/12615110.html
conseillé
Classement