[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) {