Publié le 17/02/2015
Auteur Axel
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Ouvrir une page internet avec WebView

Avec Android, le Webbrowser que l'on trouve dans de nombreux langages de programmation s'appelle WebView. En plus de savoir afficher une page internet, on peut définir le comportement du composant pour en faire un navigateur internet.

Afficher une page internet avec WebView

1159-webview


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <WebView android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1" />
</LinearLayout>
La vue comporte un seul élément à savoir un composant WebView qui permet d'afficher le contenu d'une page internet.

Pour charger du contenu au travers la connexion du périphérique Android, nous avons besoin de droit. Dans cet exemple, il est important d'obtenir l'autorisation d'accéder à internet et de modifier le contenu du Android Manifest File en y ajoutant <uses-permission android:name= "android.permission.INTERNET" />
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="My.Package"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

Paramétrer les evenements du WebView

Passons au coeur de l'apllication pour créer la vue, définir quelques règlages puis paramétrer le WebView pour qu'il se comporte comme attendu.
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
 
/**
 * Afficher une page HTML avec Webview
 * http://www.fobec.com/java/1160/ouvrir-une-page-internet-avec-webview.html
 * @author Axel fevrier 2015
 */
 
public class MainActivity extends Activity {
    //Fenetre d'attente
    private ProgressDialog progressDialog;
    //Controle d'affichage HTML
    private WebView webview;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        //Supprimer le titre + créer la vue
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
 
        //Initialer le Webview
        webview = (WebView) findViewById(R.id.webview);
        WebSettings settings = webview.getSettings();
        settings.setJavaScriptEnabled(true);
        webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
 
        //Afficher une fenetre d'attente
        progressDialog = ProgressDialog.show(MainActivity.this, "Exemple de Webview", "Chargement...");
 
        //Creer le browser et charger l'url
        webview.setWebViewClient(new MyWebClient());
        webview.loadUrl("http://www.google.com");
    }
 
    /**
     * Surcharger l'evenement retour
     * @param keyCode
     * @param event
     * @return 
     */
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
 
    /**
     * Configurer les evenements du Webview
     */
    public class MyWebClient extends WebViewClient {
 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
 
        @Override
        public void onPageFinished(WebView view, String url) {
            //  Log.i(TAG, "Finished loading URL: " +url);
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
        }
 
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
             Log.e("Myapp", "Error: " + description);
             Toast.makeText(getApplicationContext(), "Erreur: "+description, Toast.LENGTH_LONG).show();              
        }
    }
}

Quelques précisions sur les fonctions de la class:

onCreate(): initilisation du layout puis une fenetre d'attente est affichée pendant le chargement de la page HTML,

onKeyDown()
: lorsque l'utilisateur clique sur le bouton retour de sa tablette, un évènement KeyDown est envoyé à l'application. Notre application va revenir sur la page internet précedente,

MyWebClient: une nouvelle class est créer pour définir les evenements de la page internet. Par exemple, en surchargeant shouldOverrideUrlLoading(), la nouvelle Url est ouverte dans notre apllication et non pas dans le navigateur internet de Android.

Franchement, j'ai été surpris par le WebView intégré à Android. Tant afficher une page internet dans une application JAVA desktop est parfois difficile, tant sur Android c'est génial ! Quelques lignes de code suffisent et notre application sait ouvrir une page HTML et se comporte comme un navigateur internet.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - android
Mise a jour
17/02/2015
Visualisation
vu 5143 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par snoop dans java

simple, rapide et effectif du premier coup.
Merci!

Publié par Fred dans tuto

J'suis d'accord avec Do, PHP est deja un moteur de template.
Disons que le moteur de template permet de separer le code de la vue pour les debutants qui ont besoin qu'on leur impose des bornes...

Publié par xnadyx dans php5

Bonjour,

Est ce qu'il y a un autre moyen d'acces aux donnees Microsoft SQL Server?
Je ne trouve pas de tutoriaux sur Internet.

Merci.

Publié par leflo dans php5

Bonjour
Sans parler du fait que l'IP peut ne pas vouloir dire grand chose, en cas de proxy/translation comment on fait? On voit pas et on interdit tout meme si l'utilisateur n'est pas responsa...

Publié par jean-francois dans logiciel

Bonjour,
je suis tombe par hasard sur cette page que je trouver super. je cherche a faire quelque chose comme ca sur mon site. Et je galere depuis des jours... :(
Est-ce que tu partages le...