Les meilleurs navigateurs pour Android. Nous écrivons un navigateur à part entière pour Android Comment créer votre propre application de navigateur Android

Lors de l’achat d’un smartphone Android, au moins un navigateur sera installé par défaut. Il peut s'agir de Google Chrome ou d'un autre navigateur Web développé par le fabricant. Mais, si le navigateur déjà installé ne vous convient pas, vous pouvez en télécharger un autre depuis le Play Market. Si vous disposez de plusieurs applications similaires sur votre appareil, vous devez en sélectionner une à utiliser par défaut. Le reste de l'article décrira les options permettant d'y parvenir.

Navigateur par défaut pour Android

Aujourd’hui, il existe de nombreux navigateurs Web conçus pour les appareils Android. Ils ont tous leurs avantages et leurs inconvénients. Mais malgré leurs différences, vous pouvez en définir un par défaut en utilisant trois méthodes différentes. Chacun d’eux sera décrit en détail plus loin dans l’article.

Méthode 1 : définition des paramètres du système d'exploitation

La méthode la plus populaire et la plus simple pour définir le navigateur par défaut consiste à configurer le système d'exploitation. Pour installer votre navigateur Web principal, procédez comme suit :

    1. Accédez aux paramètres de votre smartphone depuis l'écran d'accueil ou le menu des applications.


    1. Élément ouvert "Applications et notifications".

    1. Faites défiler vers le bas de la liste pour trouver la ligne "Paramètres additionnels". Parfois, vous ne verrez peut-être pas cette section dans la liste, car elle est masquée dans la colonne "Plus".

    1. Ensuite, sélectionnez une option "Applications par défaut".

    1. Choisissez une rubrique "Navigateur", afin de définir le navigateur Web par défaut. Vous pouvez également définir les paramètres des messages, du téléphone, de la saisie vocale et bien plus encore.

    1. Lorsqu'une fenêtre apparaît avec une liste de tous les navigateurs installés, cochez la case à côté de celui que vous souhaitez installer par défaut.


  1. Vous pouvez maintenant utiliser votre navigateur Web. Tous les liens et messagers seront ouverts à l’avenir dans le navigateur installé.

Cette méthode est vraiment très simple et vous pouvez également définir des paramètres supplémentaires pour votre smartphone.

Méthode 2 : configuration des navigateurs Web

À l'aide des paramètres, vous pouvez définir n'importe quel navigateur par défaut, à l'exception du Google Chrome standard. Vous pouvez effectuer cette procédure en quelques étapes simples. Plus loin dans l'article, en utilisant l'exemple de la version mobile du navigateur Yandex et de MozillaFirefox, toutes les étapes à suivre pour installer le navigateur Web principal seront décrites plus en détail. Pour les autres navigateurs, l'algorithme des actions sera similaire.

    1. Ouvrez la version mobile du navigateur, dans le coin supérieur ou inférieur droit, cliquez sur les trois points verticaux pour ouvrir le menu.


    1. Trouver la colonne "Paramètres" ou "Options" et appuyez dessus pour l'ouvrir.

    1. Recherchez l'élément dans la liste fournie "Défini comme navigateur par défaut" et cliquez dessus. Si vous utilisez le navigateur Yandex, vous pouvez trouver cette section sur la page d'accueil dans le menu de la barre de recherche.

    1. Ensuite, un onglet apparaîtra sur l'écran sur lequel vous devrez cliquer "Paramètres".

    1. Vous serez redirigé vers la page des paramètres "Application par défaut". Suivez maintenant les mêmes étapes que celles décrites aux étapes 5, 6 et 7 de la méthode précédente.


Cette option est très similaire à la méthode décrite ci-dessus. Après avoir effectué certaines actions, vous accéderez toujours à la section « Applications par défaut ». Mais si vous préférez cette méthode, vous pouvez définir les paramètres sans quitter le navigateur Web.

Méthode 3 : lien actif

Cette option présente les mêmes avantages que la première méthode décrite. Vous pouvez installer n'importe quel navigateur comme navigateur principal sur votre smartphone, s'il propose une telle option.

Cette méthode n'est pertinente que lorsque vous avez téléchargé un nouveau navigateur depuis le Play Store ou que le navigateur Web principal n'a pas été préalablement installé sur votre téléphone.

  1. Accédez à l'application qui a un lien actif, cliquez dessus pour y aller. Si une fenêtre apparaît avec une liste d'actions, sélectionnez "Ouvrir".
  2. Un onglet apparaîtra devant vous dans lequel vous devrez sélectionner un navigateur Web pour ouvrir le lien. Cela devrait être le navigateur que vous souhaitez voir comme navigateur principal sur votre smartphone, puis cochez le bouton "Toujours".
  3. Le lien sélectionné s'ouvrira dans le navigateur marqué, qui sera défini par défaut.

Malheureusement, cette méthode n'est pas pertinente pour des applications telles que Telegram, VKontakte, etc. Il ne peut pas être utilisé dans toutes les situations. Mais si vous avez récemment installé un navigateur Web ou si les paramètres par défaut ont été supprimés, cette option sera la solution idéale pour vous.

Installation supplémentaire d'un navigateur web pour suivre les liens internes

Certaines applications disposent d'un lecteur de liens intégré appelé WebView. Pour ces programmes, GoogleChrome ou l'outil WebView déjà mentionné ci-dessus est utilisé comme navigateur principal. Si nécessaire, vous pouvez modifier ce paramètre.
Les navigateurs Web connus ne disposent pas de cette fonction, vous devrez donc chercher parmi les navigateurs moins populaires. Vous pouvez choisir des visionneuses de différents fabricants déjà installées dans le shell propriétaire du système d'exploitation Android. Avant de suivre les étapes ci-dessous, assurez-vous que vous disposez d'un menu actif sur votre smartphone. "Pour les développeurs".

Pour remplacer la visionneuse WebView, procédez comme suit :

    1. Accédez aux paramètres et recherchez l'élément "Système", qui se trouve en bas de la liste.

    1. Ensuite, ouvrez la section "Pour les développeurs". Vous pouvez également le trouver dans le menu principal des paramètres à la fin de la liste des actions.

    1. Trouvez maintenant la colonne "Service WebView" et exécutez-le.

    1. Si plusieurs options de visualisation des services vous sont proposées, sélectionnez celle qui vous convient le mieux en cochant la case.

  1. Maintenant, tous les liens s'ouvriront dans le navigateur que vous avez choisi.

Visionneuse de liens, très rarement remplacée. Mais vous pouvez utiliser cette option si votre smartphone dispose de l'option décrite ci-dessus.

Cet article décrit toutes les méthodes possibles pour installer le navigateur comme principal pour un smartphone Android. En fonction de la situation, vous pourrez toujours choisir la méthode qui vous convient.

J'ai commencé à apprendre la programmation Android il n'y a pas longtemps. Après qu'Eclips ait produit mon premier Hello Word, j'en ai immédiatement voulu plus : de nombreux projets et idées grandioses ont surgi. L'une de ces idées était d'écrire votre propre navigateur. Je pense que de nombreux programmeurs débutants ont eu ce désir. Voici les exigences que j’ai fixées et ce qui s’est finalement passé.

  • Le programme doit ouvrir des liens de réseau mondial et avancer et reculer librement dans les pages ;
  • Être capable de télécharger des fichiers et de les renvoyer sur le réseau ;
  • Créez des signets et enregistrez-les ;
  • Pouvoir télécharger des liens envoyés depuis d’autres applications ;
  • Il devrait y avoir un bouton de page d'accueil, un menu avec divers paramètres, etc.

En général, un navigateur à part entière à faire soi-même. Mettons cela dans le code.

Le programme est écrit sur la base de la vue Web standard incluse dans Android. J'utilise Yandex comme page de démarrage, c'est une question de goût. L'activité principale sera MainActivity.

Tout d'abord, nous définissons le balisage XML du fichier -activity_main.xml. Nous utilisons LinearLayout comme conteneur principal - nous y enveloppons la ProgressBar pour afficher le processus de chargement. Ensuite, nous créons un autre conteneur LinearLayout - nous y enveloppons notre Webview et notre FrameLayout (nous l'utilisons pour étendre la vidéo en cours de lecture en plein écran).

Voir le code

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height= "match_parent" android:orientation="vertical" outils:context=".MainActivity">

Commençons à écrire du code dans MainActivity

Code complet de MainActivity.

Afficher le code complet

Importer java.io.Fichier ; importer android.R.menu ; importer android.annotation.SuppressLint ; importer android.app.ActionBar ; importer android.app.Activity ; importer android.app.AlertDialog ; importer android.app.DownloadManager ; importer android.app.DownloadManager.Request ; importer android.app.KeyguardManager ; importer android.app.SearchManager ; importer android.content.BroadcastReceiver ; importer android.content.Context ; importer android.content.DialogInterface ; importer android.content.Intent ; importer android.content.IntentFilter ; importer android.content.SharedPreferences ; importer android.net.Uri ; importer android.os.Bundle ; importer android.os.Environment ; importer android.os.Parcelable ; importer android.os.PowerManager ; importer android.preference.PreferenceManager ; importer android.provider.MediaStore ; importer android.util.Log ; importer android.view.KeyEvent ; importer android.view.Menu ; importer android.view.MenuItem ; importer android.view.View ; importer android.view.WindowManager ; importer android.webkit.ConsoleMessage ; importer android.webkit.DownloadListener ; importer android.webkit.ValueCallback ; importer android.webkit.WebBackForwardList ; importer android.webkit.WebChromeClient ; importer android.webkit.WebView ; importer android.webkit.WebViewClient ; importer android.widget.FrameLayout ; importer android.widget.SearchView ; importer android.widget.Toast ; importer android.graphics.Bitmap ; importer android.webkit.URLUtil ; classe publique MainActivity extends Activity ( //Variable booléenne pour l'état de la connexion Boolean isInternetPresent = false; ConnectionDetector cd; private WebChromeClient.CustomViewCallback mFullscreenViewCallback; private FrameLayout mFullScreenContainer; private View mFullScreenView; private WebView mWebView; String urload; int cache = 1; SharedPreferences sPref; Activité d'activité finale = this ; Uri public imageUri ; private static final int FILECHOOSER_RESULTCODE = 2888 ; private ValueCallback mTéléchargerMessage ; Uri privé mCapturedImageURI = null ; DownloadManager privé downloadManager ; @Override protected void onCreate(Bundle savingInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Créer un exemple de classe de détecteur de connexion : cd = new ConnectionDetector(getApplicationContext()); // créer une maison bouton final ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); // détecte l'intention que le fichier est chargé et informe BroadcastReceiver récepteur = new BroadcastReceiver() ( @Override public void onReceive(Context contexte, intention d'intention) ( String action = intent.getAction(); if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) ( loadEnd(); ) ) ); // capture l'intention selon laquelle le fichier est téléchargé registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); mWebView = (WebView) findViewById(R.id.web_view); mFullScreenContainer = (FrameLayout) findViewById(R.id.fullscreen_container); mWebView.setWebChromeClient(mWebChromeClient); mWebView.loadUrl("http: //yandex.ru"); handleIntent(getIntent()); la classe HelloWebViewClient étend WebViewClient ( @Override public void onPageStarted(WebView view, String url, Bitmap favicon) ( super.onPageStarted(view, url, favicon); findViewById(R.id.progress1).setVisibility(View.VISIBLE); setTitle( url); urload=mWebView.getUrl(); ConnectingToInternet (); ) @Override public boolean ShouldOverrideUrlLoading(WebView view, String url) ( view.loadUrl(url); // lance des liens vers le marché Uri uri = Uri.parse( url); if (uri.getScheme().equals("market")) ( Intent i = new Intent(android.content.Intent.ACTION_VIEW); i.setData(uri); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity (i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) // lancer le courrier électronique if (uri.getScheme().equals("mailto")) ( Intent i = new Intent(android.content. Intent .ACTION_SEND); i.setType("text/html"); i.putExtra(Intent.EXTRA_SUBJECT, "Entrez le sujet"); i.putExtra(Intent.EXTRA_TEXT, "Entrez le texte"); i.putExtra(Intent. EXTRA_EMAIL , new String(url)); startActivity(i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) // lance le numéroteur if (uri.getScheme().equals("tel")) ( Intent i = new Intent(android.content.Intent.ACTION_DIAL); i.setData(uri ) ; startActivity(i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) // démarre l'emplacement if (uri.getScheme().equals("geo")) ( Intent i = new Intent(android .contenu . Intention.ACTION_VIEW); je.setData(uri); startActivity(i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) renvoie vrai ; ) @Override public void onPageFinished (vue WebView, URL de chaîne) ( findViewById (R.id.progress1).setVisibility (View.GONE); ) @Override public void onReceivedError (vue WebView, int errorCode, description de chaîne, chaîne failingUrl) ( ConnectingToInternet (); mWebView.loadUrl("file:///android_asset/error.png"); ) ) mWebView.setWebViewClient(new HelloWebViewClient()); // télécharge les fichiers sur l'appareil mWebView.setDownloadListener(new DownloadListener() ( @Override public void onDownloadStart(final String url, String userAgent, String contentDisposition, String mimetype, long contentLength) ( final String fileName = URLUtil.guessFileName(url, contentDisposition , mimetype); final AlertDialog.Builder downloadDialog = new AlertDialog.Builder(MainActivity.this); downloadDialog.setTitle("Download Manager"); downloadDialog.setMessage("Télécharger ce fichier dans le dossier Donwload ?" + "n" + mimetype + " n " + url); downloadDialog.setPositiveButton("Oui", new DialogInterface.OnClickListener() ( public void onClick(DialogInterface dialogInterface, int i) ( doDownload(url, fileName); dialogInterface.dismiss(); ) )) ; downloadDialog .setNegativeButton("Non", new DialogInterface.OnClickListener() ( public void onClick(DialogInterface dialogInterface, int i) ( ) )); downloadDialog.show(); ) )); ) // ********************************************** * //***** ************************************ //**** ******** ***************************** public void ConnectingToInternet ()( //Obtenir l'état du Connexion Internet isInternetPresent = cd.ConnectingToInternet(); / /Vérifier l'état d'Internet : if (isInternetPresent) ( //Il existe une connexion Internet //effectuer des requêtes HTTP : ) else ( //Il n'y a pas de connexion Internet Toast.makeText(this , "Internet est tombé !!!", Toast.LENGTH_SHORT).show( ); ) ) @SuppressLint("SetJavaScriptEnabled") @Override // paramètres public void onResume())( super.onResume(); SharedPreferences sPref = PreferenceManager.getDefaultSharedPreferences(this); if (sPref.getBoolean("img", false) ) ( mWebView.getSettings().setLoadsImagesAutomatically(false); ) else ( mWebView.getSettings().setLoadsImagesAutomatically(true); ) if ( sPref.getBoolean("js", false)) ( mWebView.getSettings().setJavaScriptEnabled( false); ) else ( mWebView.getSettings().setJavaScriptEnabled(true); ) if (sPref.getBoolean("cache", false)) ( cache = 2; ) else ( cache = 1; ) ) // écrire un signet public void saveBm(String urlPage1, String urlTitle1) ( Intent intent = new Intent( this , SaveBmActivity.class); intent.putExtra("urlTitle", urlTitle1); intent.putExtra("urlPage", urlPage1); startActivity(intent); ) public void pref() ( // Paramètres d'intention intent = new Intent( this , PreferencesActivity.class); startActivity(intent); ) // vider le cache et l'historique private void clCache())( clearCache(activity); mWebView.clearCache(true); mWebView.clearHistory(); Toast.makeText(this , "Cache et historique effacés", Toast. LENGTH_SHORT).show(); ) @Override protected void onUserLeaveHint() ( super.onUserLeaveHint(); ) @Override public boolean onKeyDown(int keyCode, KeyEvent event) (// bouton retour if ((keyCode == KeyEvent.KEYCODE_BACK)) ( mWebView.canGoBack() ; ( mWebView.goBack(); ) return true; ) return super.onKeyDown(keyCode, event); ) // récupère l'URL du programme en cours d'exécution private boolean handleIntent(Intent intent) ( String action = intent.getAction(); if (Intent .ACTION_VIEW.equals(action)) ( String url = intent.getDataString(); Toast.makeText(this, url, Toast.LENGTH_SHORT).show(); mWebView.loadUrl(url); // charger la page return true; ) return false; ) // gestionnaire de téléchargement private void doDownload(String url,String fileName) ( Uri uriOriginal = Uri.parse(url); try ( Toast.makeText(MainActivity.this, "Downloading " + fileName, Toast .LENGTH_LONG).show();Requête request = new DownloadManager.Request(Uri.parse(url));request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); DownloadManager final dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); dm.enqueue(demande); ) catch (Exception e) ( Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show(); Log.e("", "Problème de téléchargement : " + uriOriginal, e); ) ) // tirez le vidéo plein écran privé final WebChromeClient mWebChromeClient = new WebChromeClient() ( @Override @SuppressWarnings("deprecation") public void onShowCustomView(View view, int wantedOrientation, CustomViewCallback callback) ( onShowCustomView(view, callback); ) @Override public void onShowCustomView( Vue d'affichage, rappel CustomViewCallback) ( if (mFullScreenView != null) ( callback.onCustomViewHidden(); return; ) mFullScreenView = view; mWebView.setVisibility(View.GONE); mFullScreenContainer.setVisibility(View.VISIBLE); mFullScreenContainer.addView( view); mFullscreenViewCallback = callback; ) @Override public void onHideCustomView() ( super.onHideCustomView(); if (mFullScreenView == null) ( return; ) mWebView.setVisibility(View.VISIBLE); mFullScreenView.setVisibility(View.GONE) ; mFullScreenContainer.setVisibility(View.GONE); mFullScreenContainer.removeView(mFullScreenView); mFullscreenViewCallback.onCustomViewHidden(); mFullScreenView = nul ; ) // ********************************************** ******** Téléchargement de fichiers sur le réseau // openFileChooser pour Android 3.0+ public void openFileChooser (ValueCallback uploadMsg, String acceptType) ( // Mettre à jour le message mUploadMessage = uploadMsg; try ( // Créer un AndroidExampleFolder dans le fichier de la carte SD imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) , "AndroidExampleFolder"); if (!imageStorageDir.exists( ) ) ( // Créer AndroidExampleFolder dans la carte SD imageStorageDir.mkdirs (); ) // Créer le chemin et le nom du fichier d'image capturé par la caméra File file = new File (imageStorageDir + File.separator + "IMG_" + String.valueOf (System.currentTimeMillis () ) + ".jpg"); mCapturedImageURI = Uri.fromFile(file); // Intention finale de la caméra de capture d'image captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); // Créer un fichier de sélection d'intention Intent ChooserIntent = Intent.createChooser(i, "Image Chooser"); // Définit l'intention de la caméra pour sélectionner les fichiers ChooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS , new Parcelable(captureIntent)); // Pour sélectionner une image en contournant la méthode onactivityresult, appelez la méthode d'activité startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); ) catch (Exception e) ( Toast.makeText(getBaseContext(), "Exception:" + e, Toast.LENGTH_LONG).show(); ) ) // openFileChooser pour Android< 3.0 @SuppressWarnings("unused") public void openFileChooser(ValueCallbackuploadMsg) ( openFileChooser(uploadMsg, ""); ) // @SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) ( openFileChooser(uploadMsg, acceptType); ) public boolean onConsoleMessage(ConsoleMessage cm) ( onConsoleMessage(cm.message(), cm.lineNumber(), cm.sourceId()); return true; ) public void onConsoleMessage(String message, int lineNumber, String sourceID) ( //Log.d("androidruntime", "Afficher les messages de la console, utilisé pour le débogage : " + message); ); );// Fin de setWebChromeClient // Récupère le résultat @SuppressWarnings("unused") private Object data; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) ( if (data == null) ( return; ) String urlPage2 = data.getStringExtra("urlPage2"); mWebView.loadUrl(urlPage2); if (requestCode = = FILECHOOSER_RESULTCODE) ( if (null == this.mUploadMessage) ( return; ) Uri result = null; try ( if (resultCode != RESULT_OK) ( result = null; ) else ( // récupérer de sa propre variable si l'intention est un résultat nul = data == null ? mCapturedImageURI: data.getData(); ) ) catch (Exception e) ( Toast.makeText(getApplicationContext(), "activity:" + e, Toast.LENGTH_LONG).show(); ) mUploadMessage .onReceiveValue (résultat); mUploadMessage = null; ) ) //************************************** public void loadEnd () ( Toast .makeText(this, "File Uploaded to Donwload", Toast.LENGTH_SHORT).show(); ) // menu @Override public boolean onCreateOptionsMenu(Menu menu) ( // Gonfle le menu ; cela ajoute éléments à la barre d'action si elle est présente.getMenuInflater().inflate(R.menu.main, menu); renvoie vrai ; ) // ********************************************** ******** @Override public boolean onOptionsItemSelected(MenuItem item) ( switch (item.getItemId()) ( case android.R.id.home:// bouton d'accueil mWebView.loadUrl("http://yandex .ru"); return true; case R.id.item1:// back mWebView.canGoBack(); ( mWebView.goBack(); ) return true; case R.id.item2: // forward mWebView.canGoForward() ; ( mWebView.goForward(); ) renvoie true ; case R.id.item3 : // recharge mWebView.reload(); ( mWebView.reload(); ) renvoie true ; case R.id.item4:// efface le cache mWebView.clearCache(true); clearCache(activity); Toast.makeText(this, "Cache clear.", Toast.LENGTH_SHORT).show(); return true; case R.id.item5: mWebView.clearHistory(); // effacer l'historique Toast.makeText(this, "L'historique est clair.", Toast.LENGTH_SHORT).show(); return true; case R.id.item6: saveBm(mWebView.getUrl(), mWebView.getTitle()) ;/ / écrire un signet return true; case R.id.item7:// panneau de signets Intent intent1 = new Intent(this, SaveBmActivity.class); startActivityForResult(intent1, 1); renvoie vrai ; case R.id.item8 : // arrête le chargement de mWebView.stopLoading(); renvoie vrai ; case R.id.item9 : pref();// les paramètres renvoient vrai ; case R.id.item10 : // vide pour l'instant, renvoie true ; case R.id.item11:// exit if (cache == 2) ( clCache(); ) finish(); renvoie vrai ; par défaut : return super.onOptionsItemSelected(item); ) ) @SuppressWarnings("obsolète") @Override public void onDestroy() ( super.onDestroy(); mWebView.stopLoading(); mWebView.clearCache(true); mWebView.clearView(); mWebView.freeMemory(); mWebView. destroy(); mWebView = null; ) // vider le cache void clearCache(Context context) ( clearCacheFolder(context.getCacheDir()); ) void clearCacheFolder(final File dir) ( if (dir! = null && dir.isDirectory()) ( try ( for (File child:dir.listFiles()) ( //efface d'abord les répertoires de manière récursive if (child.isDirectory()) clearCacheFolder(child); else //puis l'enfant fichiers eux-mêmes .delete(); ) ) catch(Exception e) ( ) ) ) )

Le projet peut être téléchargé

Nous avons déjà commencé à nous doter pleinement de logiciels personnels ; rappelez-vous notre merveilleuse calculatrice et convertisseur. Et dans cette leçon, nous apprendrons à créer un navigateur simple avec lequel surfer sur Internet. D'accord, surfer sur le Web avec son propre navigateur est bien plus agréable que de le faire sur Opera ou Chrome (à peine plus pratique, mais plus agréable :)). Nous créons un nouveau projet, choisissez traditionnellement les noms vous-même. Personnellement, je ne crée pas tout à partir de zéro à chaque fois, mais j'ouvre simplement ce que j'ai et je nettoie tout le code jusqu'à son état d'activité vide d'origine. Faites ce qui vous convient le mieux.

Alors, décrivons brièvement la portée et les spécificités des travaux ultérieurs. Nous devons créer un élément , dans lequel tout se passera, écrivez le code qui crée notre navigateur Web personnel, équipez-le de fonctions de base, enregistrez l'autorisation pour notre application d'utiliser Internet dans le fichier manifeste et écrivez un gestionnaire de pression sur un bouton matériel "Dos" sur l'appareil (c'est-à-dire ce qui se passera dans notre navigateur lorsque nous cliquons sur ce bouton).

Commençons. Ouvrir le fichier activité_main.xml. Nous y créons un seul élément , ce qui nous suffit amplement pour implémenter un navigateur web :

< WebView xmlns: android= "http://schemas.android.com/apk/res/android" android : layout_height= "match_parent" android : layout_width= "match_parent" android : id= "@+id/web" />

La fenêtre de mise en page ressemblera à ceci :

Après cela, traitons immédiatement du dossier AndroidManifest.xml. Ouvrez-le et ajoutez-y deux lignes, l'une est l'autorisation pour l'application d'utiliser Internet, l'autre change le style de l'application, ou plutôt cache le panneau « Titre » de l'application (le panneau avec le titre de l'application) afin pour fournir à la fenêtre du navigateur plus d'espace pour afficher les pages.

Nous écrivons une ligne pour l'autorisation d'utiliser Internet avant balise d'ouverture ...:

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

Ajoutons maintenant à la ligne de paramètres de notre Activité commande pour masquer l'en-tête (ligne du bas en gras, c'est aussi en AndroidManifest.xml):

< activity android: name= ".MainActivity" android: label= Android : thème = "@android:style/Theme.NoTitleBar" >

Passons maintenant à la partie la plus importante et la plus responsable du travail : l'écriture de code Java. Ouvrez le fichier MainActivity.java et écrivez ce qui suit (les explications sont données dans le code après les signes //, pour ceux qui ne l'ont pas remarqué) :

paquet home.myapplication ; importer android.app.Activity ; importer android.app.AlertDialog ; importer android.content.ContentValues ​​​​; importer android.content.Intent ; importer android.database.Cursor ; importer android.database.sqlite.SQLiteDatabase; importer android.database.sqlite.SQLiteOpenHelper; importer android.support.v7.app.ActionBarActivity; importer android.os.Bundle ; importer android.util.Log ; importer android.view.KeyEvent ; importer android.view.Menu ; importer android.view.MenuItem ; importer android.view.View ; importer android.webkit.WebView ; importer android.webkit.WebViewClient ; importer android.widget.Button ; importer android.widget.EditText ; importer android.widget.RadioButton ; importer android.widget.TextView ; la classe publique MainActivity étend l'activité ( // Déclare une variable de type WebView WebView mWeb privé ; // Crée une classe de type navigateur Web (WebViewClient), que l'on configure // par défaut autorisation de traiter tous les liens au sein de cette classe, // sans recourir à des programmes tiers : la classe privée WebViewer étend WebViewClient ( (vue WebView, URL de chaîne ) ( view.loadUrl(url); return true ; ) ) public void onCreate (Bundle savingInstanceState ) ( super. onCreate(savedInstanceState); setContentView(R . layout.activity_main); // Lie la variable de type WebView déclarée à celle que nous avons créée // à l'élément WebView dans le fichier Activity_main.xml : mWeb= (WebView )findViewById(R . id. web); // Nous activons la prise en charge des scripts Java pour cet élément : mWeb. getSettings(). setJavaScriptEnabled(true); // Configure une page qui se chargera au démarrage, vous pouvez saisir n'importe lequel : mWeb. URL de chargement ( "http://developeroleg.ucoz.ru/"); // Configure un navigateur pour notre élément WebView, connecte celui que nous avons créé ci-dessus // Client Web avec lequel les pages seront consultées : mWeb. setWebViewClient(nouveau WebViewer()); ) // Nous écrivons du code pour traiter le clic du bouton retour de l'appareil, ce qui nous permettra d'appuyer sur // utilise le bouton "Retour" pour revenir à la page précédente, plutôt que de simplement fermer les applications. // Il sera fermé avec le bouton "Retour" seulement si on est sur la page d'accueil // la page indiquée ci-dessus :@Override public void onBackPressed() ( if (mWeb. canGoBack()) ( mWeb. goBack();) else ( super. onBackPressed(); ) ) )

C'est tout! En fait, tout est assez simple et après quelques travaux, nous avons notre propre navigateur, bien sûr, il est assez simple et n'a aucune option, mais cela suffit amplement pour comprendre l'essence de la création de telles applications.

Cher, je suis étudiant au BCA. Je dois faire un projet pour le dernier semestre. J'ai donc décidé de créer une application Web qui fonctionne sur le système d'exploitation Android, mais je suis tout à fait favorable à cette application. Alors, quelqu'un peut-il m'aider avec ça. J'ai déjà installé tous les outils nécessaires comme jdk, Android SDK 3.0, Eclipse. Mais maintenant, je ne sais pas par où commencer le développement du navigateur. Alors s'il vous plaît, aidez-moi... Je n'ai que 2 mois pour ce projet. Alors est-ce possible dans 2 mois ou pas ?

Cela dépend de ce que vous entendez par conception du navigateur...

Développer un navigateur + un moteur de rendu à partir de zéro demande beaucoup de travail, mais vous pouvez facilement créer un navigateur basé sur Androids WebView à l'aide de WebViewClient et créer une nouvelle interface utilisateur en modifiant la façon dont l'utilisateur interagit avec le navigateur.

Webview dispose de toutes sortes de points d'ancrage pour intercepter les interactions du navigateur, vous pouvez donc facilement l'étendre. Par exemple, vous pouvez permettre à l'utilisateur de retourner des pages (par exemple, Google Fastflip), d'expérimenter la 3D en mappant la page Web rendue dans un espace OpenGL (par exemple, un navigateur de sphère), etc.

Pour commencer, jetez un œil au blog d'Alexander Kmetek et à son projet Mosambro, qui étend le navigateur Android en ajoutant le support des microformats.

Cela ressemble à un très gros projet et vous ne pouvez donc pas partir de zéro et l'enregistrer. Vous devez établir un plan sur la manière dont vous souhaitez mettre en œuvre toutes les parties, rédiger des diagrammes de classe, etc. Si vous êtes étudiant en informatique, vous devez en avoir entendu parler au cours des semestres précédents.

Il faut d’abord se demander si ce projet est réalisable Comme vous pouvez le voir dans les commentaires, la plupart des gens s’accordent sur le fait qu’il ne faut pas sous-estimer cette tâche !

Je vous propose vraiment de comprendre l'ampleur de cette tâche, voici le code source du navigateur Androids vous donnant une idée de sa complexité.

La création d'un navigateur de base pourrait être réalisée en un jour ou deux pour ceux qui ont une expérience en développement Android, tout comme d'autres ont déclaré que WebView fournit presque tout ce dont vous avez besoin pour afficher une page Web. Il y a quelques paramètres pour JavaScript et d'autres fonctions à vérifier, puis après avoir étiqueté le champ de texte principal pour l'URL et le bouton Go, qui est à peu près le navigateur Web principal.

Le vrai travail réside dans tous les paramètres avancés. Construire un navigateur qui rivalise avec les grands peut être un peu difficile pour une personne en quelques mois, mais créer votre propre navigateur qui fonctionne est tout à fait possible. Essayer!

Pour créer un navigateur Web complet sous Android, vous utilisez WebView.

Liaison de code simple :

WebView wv = (WebView)findViewById(R.id.webview1); wv = (WebView) findViewById(R.id.webView1); wv.loadUrl("http://www.apsmind.com");

Android vous permet de créer votre propre fenêtre pour afficher des pages Web ou même de créer votre propre clone de navigateur à l'aide de l'élément. L'élément lui-même utilise le moteur WebKit et possède de nombreuses propriétés et méthodes. Nous nous limiterons à un exemple basique de création d'une application avec laquelle nous pouvons visualiser des pages sur Internet. Les dernières versions utilisent le moteur Chromium, mais il n'y a pas beaucoup de différence pour des tâches simples.

Créons un nouveau projet Mon navigateur et remplacez immédiatement le code dans le fichier de balisage res/layout/activity_main.xml:

Ouvrons maintenant le fichier d'activité MainActivity.java et déclarez le composant, puis initialisez-le - activez la prise en charge de JavaScript et spécifiez la page à charger.

WebView privée WebView ; public void onCreate(Bundle savingInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); // activer la prise en charge de JavaScript webView.getSettings().setJavaScriptEnabled(true) ; // spécifie la page de téléchargement webView.loadUrl("http://site/android"); )

Étant donné que l'application utilisera Internet, vous devez définir l'autorisation d'accès à Internet dans le fichier manifeste.

Là, dans le manifeste, nous modifions la ligne de l'écran en supprimant le titre de notre application (en gras) :

android:theme="@style/Theme.AppCompat.NoActionBar">

Lançons l'application. Nous disposons désormais d’un simple visualiseur de pages Web, mais avec un inconvénient. Si vous cliquez sur un lien, votre navigateur par défaut se lancera automatiquement et la nouvelle page y sera affichée. Plus précisément, c'était comme ça avant. Sur les nouveaux appareils, lorsque vous lancez l'application, le navigateur s'ouvre immédiatement.

Pour résoudre ce problème et ouvrir des liens dans votre programme, vous devez remplacer la classe WebViewClient et laissez notre application gérer les liens. Ajoutons une classe imbriquée dans le code :

La classe privée MyWebViewClient étend WebViewClient ( @TargetApi(Build.VERSION_CODES.N) @Override public boolean ShouldOverrideUrlLoading(WebView view, WebResourceRequest request) ( view.loadUrl(request.getUrl().toString()); return true; ) // Pour anciens appareils @Override public boolean ShouldOverrideUrlLoading(WebView view, String url) ( view.loadUrl(url); return true; ) )

Puis dans la méthode onCréer() définissons une instance MonClientWebView. Il peut être localisé n'importe où après l'initialisation de l'objet :

WebView.setWebViewClient(nouveau MyWebViewClient());

Maintenant dans notre application créée WebViewClient, qui permet à toute URL spécifiée sélectionnée d'être chargée dans le conteneur lui-même, plutôt que de devoir lancer le navigateur. La méthode est responsable de cette fonctionnalité, dans laquelle nous spécifions l'URL actuelle et souhaitée. Valeur de retour vrai signifie que nous n'avons pas besoin de lancer un navigateur tiers, mais que nous téléchargerons indépendamment le contenu à partir du lien. Dans la version API 24, une version surchargée de la méthode a été ajoutée, merci d'en tenir compte.

Relancez le programme et assurez-vous que les liens sont désormais chargés dans l'application elle-même. Mais maintenant, un autre problème est apparu. Nous ne pouvons pas revenir à la page précédente. Si nous appuyons sur le bouton RETOUR de notre appareil, nous fermerons simplement notre application. Pour résoudre le nouveau problème, nous devons appuyer sur le bouton RETOUR. Ajoutez une nouvelle méthode :

@Override public void onBackPressed() ( if(webView.canGoBack()) ( webView.goBack(); ) else ( super.onBackPressed(); ) )

Nous devons vérifier ce qui prend en charge la navigation vers la page précédente. Si la condition est vraie alors la méthode est appelée retourner(), ce qui nous ramène à la page précédente. S'il existe plusieurs pages de ce type, nous pouvons alors revenir séquentiellement à la toute première page. Dans ce cas, la méthode renverra toujours la valeur vrai. Lorsque nous reviendrons à la toute première page à partir de laquelle nous avons commencé notre voyage sur Internet, la valeur reviendra FAUX et appuyer sur le bouton RETOUR sera traité par le système lui-même, ce qui fermera l'écran de l'application.

Relancez l'application. Vous disposez désormais de votre propre navigateur Web, vous permettant de suivre des liens et de revenir à la page précédente. Après avoir étudié la documentation, vous pouvez équiper l'application d'autres friandises savoureuses pour votre navigateur.

Si vous avez besoin que certains des liens menant à votre site soient ouverts dans le navigateur et que des liens locaux soient ouverts dans l'application, utilisez une condition avec des valeurs de retour différentes.

La classe publique MyWebViewClient étend WebViewClient ( @Override public boolean ShouldOverrideUrlLoading(WebView view, String url) ( if(Uri.parse(url).getHost()..ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity (intention); return true; ) )

Une méthode universelle qui ouvrira tous les liens locaux dans l'application, le reste dans le navigateur (on change une ligne) :

La classe publique MyAppWebViewClient étend WebViewClient ( @Override public boolean ShouldOverrideUrlLoading (WebView view, String url) ( if(Uri.parse(url).getHost().length() == 0)( return false; ) Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity(intent); renvoie vrai ; ) )

Compliquons maintenant un peu l'exemple pour que l'utilisateur dispose d'une alternative aux navigateurs standards.

Pour que ce soit plus clair, réorganisons l'exemple comme suit. Créez deux activités. Sur la première activité, placez un bouton pour accéder à la deuxième activité, et sur la deuxième activité, placez un composant.

Dans le manifeste, nous spécifions un filtre pour la deuxième activité.

Code du bouton pour accéder à la deuxième activité.

Public void onClick(View view) ( Intent intent = new Intent("ru.alexanderklimov.Browser"); intent.setData(Uri.parse("http://site/android/")); startActivity(intent); )

Nous avons créé notre propre intention avec un filtre et fourni des données : l'adresse du site Web.

La deuxième activité doit recevoir des données :

Paquet ru.alexanderklimov.testapplication ; importer android.net.Uri ; importer android.support.v7.app.AppCompatActivity ; importer android.os.Bundle ; importer android.webkit.WebView ; importer android.webkit.WebViewClient ; la classe publique SecondActivity étend AppCompatActivity ( @Override protected void onCreate(Bundle savingInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Uri url = getIntent().getData(); WebView webView = findViewById(R.id.webView); webView.setWebViewClient(new Callback()); webView.loadUrl(url.toString()); ) la classe privée Callback étend WebViewClient ( @Override public boolean ShouldOverrideUrlLoading (WebView view, String url) ( return(false); ) ) )

Dans le filtre de la deuxième activité, nous avons spécifié deux actions.

Cela signifie que n'importe quelle activité (lire : application) peut déclencher l'activité de votre mini-navigateur de la même manière. Lancez n'importe quel ancien projet dans le studio dans une fenêtre séparée ou créez-en un nouveau, ajoutez-y un bouton et écrivez le même code que celui que nous avons utilisé pour cliquer sur le bouton.

Lancez la deuxième application (la première application peut être fermée) et cliquez sur le bouton. Vous ne lancerez pas la première application avec l'écran de démarrage, mais immédiatement la deuxième activité avec un mini-navigateur. De cette façon, n'importe quelle application peut lancer un navigateur sans connaître le nom de la classe de votre activité, mais en utilisant uniquement la chaîne "ru.alexanderklimov.Browser", transmis à Intention. Dans ce cas, l'activité de votre navigateur doit avoir une catégorie et des données par défaut. Laisse-moi te rappeler:

Vous pouvez représenter votre chaîne sous la forme d'une constante de chaîne et indiquer à tous les utilisateurs potentiels de votre navigateur comment ils peuvent l'exécuter eux-mêmes. Mais Android a déjà une telle constante toute faite ACTION_VIEW, qui selon la documentation est le suivant :

Finale statique publique java.lang.String ACTION_VIEW = "android.intent.action.VIEW";

Réécrivons le code du bouton dans la deuxième application

Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://site/android/")); startActivity (intention);

Que va-t-il se passer cette fois-ci ? Nous rappelons que nous avons deux actions prescrites, dont android.intent.action.VIEW. Cela signifie que notre première application avec un navigateur doit également reconnaître cette commande lorsqu'une application utilisateur utilise ce code. L'émulateur possède au moins un de ces programmes "Navigateur", et maintenant notre deuxième activité de la première application y a été ajoutée. Un choix de deux applications apparaîtra à l'écran.

Et si vous supprimez tous les navigateurs alternatifs et ne laissez que votre programme, vous n'aurez pas le choix. Votre navigateur deviendra le principal. Et si une application souhaite lancer une page Web de la manière spécifiée, votre programme s'ouvrira.

Une petite remarque. Si vous remplacez la dernière ligne par ceci :

StartActivity(Intent.createChooser(intent, "Meow..."));

Ensuite, dans la fenêtre de sélection du programme, au lieu de la ligne supérieure « Ouvrir avec » ou de sa traduction locale, votre ligne apparaîtra. Mais ce n’est pas l’essentiel. Si, pour une raison quelconque, il n'y a pas un seul navigateur sur l'appareil, cette version du code ne provoquera pas le crash de l'application, contrairement à la version originale. Par conséquent, utilisez l’option proposée par souci de fiabilité.