IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Réaliser un mini navigateur internet [Tutoriel]


Sujet :

Composants graphiques Android

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 1 618
    Points
    1 618
    Par défaut Réaliser un mini navigateur internet
    Bonjour,

    Voici un petit tutoriel expliquant comment réaliser un mini navigateur web: http://a-renouard.developpez.com/tut...avigateur-web/

    Toutes les remarques sont les bienvenues !

  2. #2
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut UI Thread
    Bonjour,

    ne serait-ce pas mieux, dans le OnClickListener, de créer un nouveau Thread avec le code à réaliser et le lancer, afin de libérer l'UI Thread le plus tôt possible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    button.setOnClickListener(
    	new OnClickListener() {
    		@Override
    		public void onClick(View v) {
                            // ------------------ Modification ici ---------------
    			new Thread(){
    				public void run(){
                           //----------------------------------------------------
    					//on récupère l'url présente dans l'EditText
    					url = editText.getText().toString();	
     
    					try {
    						//on récupère le code HTML associé à l'URL que l'on a indiqué dans l'EditText
    						pageWeb = Tutoriel7_Android.getPage(url);
     
    						//on autorise le JavaScript dans la WebView
    						webView.getSettings().setJavaScriptEnabled(true);
    						//on charge les données récupérées dans la WebView
    						webView.loadDataWithBaseURL("fake://not/needed", pageWeb, mimeType, encoding, "");
    					} catch (ClientProtocolException e) {
    						e.printStackTrace();
    					} catch (IOException e) {
    						e.printStackTrace();
    					}
                             //----------------- Modification ici ----------------------
    				}
    			}.start();
                            //--------------------------------------------------------
    		}
    	}
    );

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 1 618
    Points
    1 618
    Par défaut
    Tu as raison tails c'est mieux de créer un nouveau Thread !

    Merci pour ta remarque intéressante !

    Edit : J'ai corrigé le tuto et mis le code que tu as écrit tails !

  4. #4
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut Merci de l'attention portée à ma remarque
    Merci beaucoup de l'attention portée à ma remarque

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1
    Points : 7
    Points
    7
    Par défaut Plus simple
    Cette version me semble beaucoup plus simple. La méthode getPage() n'est plus utilisée.
    On profite en plus de la gestion du cache du navigateur car on le laisse gérer la connexion. On n'a pas besoin de thread.
    NOTE : Code non testé (pas de sdk sous la main...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		//On récupère l'EditText, le WebView, et le Button grâce au ID
    		editText = (EditText) findViewById(R.id.EditText);
    		webView = (WebView) findViewById(R.id.WebView);
    		button = (Button) findViewById(R.id.Button);
    		//on autorise le JavaScript dans la WebView
    		webView.getSettings().setJavaScriptEnabled(true);
     
    		//On affecte un évènement au bouton
    		button.setOnClickListener(
    				new OnClickListener() {
    					@Override
    					public void onClick(View v) {
    						//on récupère l'url présente dans l'EditText
    						url = editText.getText().toString();
    						webview.setWebChromeClient(new WebChromeClient() {
    							// TODO implémenter gestion d'erreur, progression du chargement...
    						}
    						//on charge la page
    						webView.loadUrl(url);
    					}
    				}
    				);
    	}
    Cf. Doc webview et Tutorial webview

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 1 618
    Points
    1 618
    Par défaut
    Citation Envoyé par zeludo Voir le message
    NOTE : Code non testé (pas de sdk sous la main...)
    Je testerai et je te tiens au courant en tout cas merci de proposer des améliorations c'est comme cela qu'on avance :

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    bonjour, comment doit je modifié le code pour relié le navigateur à une seule page, sans que l'url ne s'affiche

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Citation Envoyé par tails Voir le message
    Bonjour,

    ne serait-ce pas mieux, dans le OnClickListener, de créer un nouveau Thread avec le code à réaliser et le lancer, afin de libérer l'UI Thread le plus tôt possible ?
    Citation Envoyé par Axon_TutoMobile Voir le message
    Tu as raison tails c'est mieux de créer un nouveau Thread !

    Merci pour ta remarque intéressante !

    Edit : J'ai corrigé le tuto et mis le code que tu as écrit tails !
    Il semble que ce ne soit pas conseillé de passer par un thread pour manipuler une webview :

    If you call methods on WebView from any thread other than your app's UI thread, it can cause unexpected results
    cf : http://developer.android.com/guide/w...g.html#Threads

    Je comprend pas l'intérêt de la méthode getPage() sachant que la webview embarque déjà cette fonctionnalité.
    Il aurait été plus intéressant de mettre en place une barre de progression par exemple et d'implémenter des contrôles du type "précédent" "suivant", ce que la webview permet très simplement.

    En fait ce qui me perturbe c'est que l'utilisation d'une webview permet de s'affranchir de la complexité du httpclient et à contrario on utilisera httpclient quand on à pas besoin du rendu graphique de l'html.

  9. #9
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut Oups : pas expert en WebView
    Citation Envoyé par grunk Voir le message
    Il semble que ce ne soit pas conseillé de passer par un thread pour manipuler une webview :


    cf : http://developer.android.com/guide/w...g.html#Threads

    Je comprend pas l'intérêt de la méthode getPage() sachant que la webview embarque déjà cette fonctionnalité.
    Il aurait été plus intéressant de mettre en place une barre de progression par exemple et d'implémenter des contrôles du type "précédent" "suivant", ce que la webview permet très simplement.

    En fait ce qui me perturbe c'est que l'utilisation d'une webview permet de s'affranchir de la complexité du httpclient et à contrario on utilisera httpclient quand on à pas besoin du rendu graphique de l'html.
    Oups : autant pour moi.
    Je suis loin d'être un expert en Android, qui plus est en WebView, que je n'ai pas encore utilisé. J'ai juste voulu appliquer le principe de la séparation des tâches en programmation de GUI avec Java.
    Merci d'avoir souligné l'erreur de mon intervention

Discussions similaires

  1. réalisation d'un navigateur WEB
    Par capello123 dans le forum Windows
    Réponses: 4
    Dernier message: 07/07/2006, 20h19
  2. Lancement d'un navigateur internet sur une URL SIMPLEMENT
    Par Jean-mich dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 11/12/2005, 00h46
  3. Editer un XML avec un navigateur internet...
    Par kobe dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2005, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo