Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] : WebView et images locales

Sujet résolu
    29 juin 2012 à 20:09:18

    Bonjour,

    débutant dans le développement Android, j'ai réussi à écrire ces quelques lignes pour afficher une WebView dans mon application (simple WebApp finalement).

    Afin d'accélérer le chargement, j'aimerais charger des images (et codes css/js) en local, en lieu et place de ceux du site original.
    Ne sachant pas trop comment m'y prendre, je serai ravi d'avoir quelques pistes.

    Merci d'avance.

    package tomtom.android.com;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.MenuItem;
    import android.view.Window;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Toast;
    
    public class ProgTVActivity extends Activity {
    	
    	final Activity activity = this;
    	
    	@Override
    	public boolean onOptionsItemSelected(MenuItem item) {
    	    switch (item.getItemId()) {
    	        case android.R.id.home:
    	            // app icon in action bar clicked; go home
    	            Intent intent = new Intent(this, ProgTVActivity.class);
    	            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    	            startActivity(intent);
    	            return true;
    	        default:
    	            return super.onOptionsItemSelected(item);
    	    }
    	}
    	  
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
            setContentView(R.layout.main);
            final WebView webView = (WebView) findViewById(R.id.webview);
            webView.getSettings().setJavaScriptEnabled(true);
      
            webView.setWebChromeClient(new WebChromeClient() {
                public void onProgressChanged(WebView view, int progress)
                {
                    activity.setTitle("Chargement...");
                    activity.setProgress(progress * 100);
      
                    if(progress == 100)
                        activity.setTitle(R.string.app_name);
                    if(progress == 100)
                        Toast.makeText(ProgTVActivity.this, "Chargement terminé", Toast.LENGTH_LONG).show();
                }
            });
      
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
                {
    				webView.loadUrl("file:///android_asset/erreur.html");
    				}
      
    
    			@Override
                public boolean shouldOverrideUrlLoading(WebView view, String url)
                {
                    view.loadUrl(url);
                    return true;
                }
            });
          
            webView.loadUrl("http://site");
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    
    	}
    
    • Partager sur Facebook
    • Partager sur Twitter
      30 juin 2012 à 1:51:46

      Je n'ai jamais fait de WebView sous Android, mais en cherchant rapidement j'ai trouvé la page des WebSettings sur le site android, qui me semble très pertinente :)

      J'ai trouvé (entre autres) :
      int	LOAD_CACHE_ELSE_NETWORK	;// Use cache if content is there, even if expired (eg, history nav).
      int	LOAD_CACHE_ONLY	;// Don't use the network, load from cache only.
      int	LOAD_DEFAULT	;// Default cache usage pattern.
      int	LOAD_NORMAL	;// Normal cache usage pattern.
      int	LOAD_NO_CACHE	;// Don't use the cache, load from network.
      
      synchronized void setAppCachePath (String appCachePath) { }
      synchronized void setAppCacheEnabled (boolean flag) { }
      void setCacheMode (int mode) { }
      
      • Partager sur Facebook
      • Partager sur Twitter
        30 juin 2012 à 17:13:48

        Merci beaucoup, c'est exactement ce que je cherchais.
        Après quelques heures de galère pour comprendre le fonctionnement, ça marche enfin comme je voulais.

        package tomtom.android.com;
        
        import android.app.Activity;
        import android.content.Intent;
        import android.net.ConnectivityManager;
        import android.os.Bundle;
        import android.view.MenuItem;
        import android.view.Window;
        import android.webkit.WebChromeClient;
        import android.webkit.WebView;
        import android.webkit.WebViewClient;
        import android.widget.Toast;
        
        public class ProgTVActivity extends Activity {
        	
        	final Activity activity = this;
        	
        	@Override
        	public boolean onOptionsItemSelected(MenuItem item) {
        	    switch (item.getItemId()) {
        	        case android.R.id.home:
        	            // app icon in action bar clicked; go home
        	            Intent intent = new Intent(this, ProgTVActivity.class);
        	            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        	            startActivity(intent);
        	            return true;
        	        default:
        	            return super.onOptionsItemSelected(item);
        	    }
        	}
        
            @Override
            public void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
                setContentView(R.layout.main);
                final WebView webView = (WebView) findViewById(R.id.webview);
                	webView.getSettings().setJavaScriptEnabled(true);
                ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE);
                if(cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting()){
                    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
                }
                else{
                    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
                }        
                	webView.setWebChromeClient(new WebChromeClient() {
                    public void onProgressChanged(WebView view, int progress)
                    {
                        activity.setTitle("Chargement...");
                        activity.setProgress(progress * 100);
          
                        if(progress == 100)
                            activity.setTitle(R.string.app_name);
                        if(progress == 100 && webView.getSettings().getCacheMode() == WebSettings.LOAD_CACHE_ONLY)
                            activity.setTitle("CACHE");
                        if(progress == 100)
                            Toast.makeText(ProgTVActivity.this, "Chargement terminé", Toast.LENGTH_LONG).show();
                    }
                });
          
                webView.setWebViewClient(new WebViewClient() {
                	@Override
                    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
                    {
        				webView.loadUrl("file:///android_asset/erreur.html");
        				}  
        
        			@Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url)
                    {
                        view.loadUrl(url);
                        return true;
                    }
                });
              
                webView.loadUrl("http://site");
                getActionBar().setDisplayHomeAsUpEnabled(true);
            }
        	}
        
        • Partager sur Facebook
        • Partager sur Twitter

        [Android] : WebView et images locales

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown