灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2704回复:0

android 用webview自制带有history和download功能的浏览器

楼主#
更多 发布于:2012-09-06 13:43

package com.mysession;

import java.util.ArrayList;
import java.util.List;

import Android.app.Activity;
import Android.content.Intent;
import Android.graphics.Bitmap;
import Android.graphics.Canvas;
import Android.graphics.Matrix;
import Android.graphics.Picture;
import Android.net.Uri;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.webkit.CookieManager;
import Android.webkit.CookieSyncManager;
import Android.webkit.DownloadListener;
import Android.webkit.ValueCallback;
import Android.webkit.WebChromeClient;
import Android.webkit.WebHistoryItem;
import Android.webkit.WebSettings;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
import Android.widget.Button;
import Android.widget.EditText;
import Android.widget.GridView;
import Android.widget.ProgressBar;

import com.mysession.model.HistoryModel;

public class D_sessionActivity extends Activity implements OnClickListener,
         DownloadListener {

    private static final String TAG = "TAG";
     // private String detailUrl =
     // "http://www.google.com";
     // private String detailUrl =
     // "http://172.20.230.67:8900/iportal/servlet/GetMobileContent?;user=administrator;vol=allen_iServer;profile=myserver;password=uaABd7AZ0ThXe6WFM2FdqA%3D%3D;respFormat=html;subID=7fb249ba-1470-4663-9863-a743c740aeeb;enc=1";

    // private String detailUrl = "http://music.sogou.com/";
     private WebView webview;
     private Button btnLoad, btnReset, btnHistory, btnBack, btnForward;
     private EditText etUrl;
     private ProgressBar mProgressBar;
     private GridView mGridView;
     private CookieManager cookieManager;
     private BrowserHistoryAdapter browserHistoryAdapter;
     private List<HistoryModel> historyModels = new ArrayList<HistoryModel>();

    /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);

        CookieSyncManager.createInstance(this);
         cookieManager = CookieManager.getInstance();

        webview = (WebView) findViewById(R.id.webView1);
         btnLoad = (Button) findViewById(R.id.btnLoad);
         btnReset = (Button) findViewById(R.id.btnReset);
         btnHistory = (Button) findViewById(R.id.btnHistory);
         mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
         etUrl = (EditText) findViewById(R.id.etUrl);
         btnBack = (Button) findViewById(R.id.btnBack);
         btnForward = (Button) findViewById(R.id.btnForward);
         mGridView = (GridView) findViewById(R.id.gridView1);

        btnLoad.setOnClickListener(this);
         btnReset.setOnClickListener(this);
         btnHistory.setOnClickListener(this);
         btnBack.setOnClickListener(this);
         btnForward.setOnClickListener(this);

        webview.getSettings().setjavaScriptEnabled(true);
         webview.setWebViewClient(new BirtMobileWebViewClient());
         webview.setWebChromeClient(new GeoClient());
         webview.setDownloadListener(this);
         webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

        // WebBackForwardList history = webview.copyBackForwardList();
         // if (history != null) {
         // browserHistoryAdapter = new BrowserHistoryAdapter(history, this);
         // mGridView.setAdapter(browserHistoryAdapter);
         // }

        webview.setVisibility(View.VISIBLE);
         mGridView.setVisibility(View.GONE);
     }

    @Override
     public void onClick(View v) {
         if (v == btnLoad) {
             cookieManager.setAcceptCookie(true);
             webview.setVisibility(View.VISIBLE);
             mGridView.setVisibility(View.GONE);

            if (!"".equalsIgnoreCase(etUrl.getText().toString())) {
                 webview.loadUrl(etUrl.getText().toString());
             }

        } else if (v == btnReset) {
             cookieManager.removeAllCookie();
         } else if (v == btnHistory) {
             if (webview.copyBackForwardList() == null) {
                 return;
             } else {
                 webview.setVisibility(View.GONE);
                 mGridView.setVisibility(View.VISIBLE);

                if (browserHistoryAdapter == null) {
                     browserHistoryAdapter = new BrowserHistoryAdapter(
                             historyModels, this);
                     mGridView.setAdapter(browserHistoryAdapter);

                } else {
                     browserHistoryAdapter.setHostory(historyModels);
                     browserHistoryAdapter.notifyDataSetChanged();
                 }
             }

        } else if (v == btnBack) {
             webview.goBack();
         } else if (v == btnForward) {
             webview.goForward();
         }
     }

    // create a webview client that handles mailto links within the webview
     private class BirtMobileWebViewClient extends WebViewClient {
         @Override
         public boolean shouldOverrideUrlLoading(WebView view, String url) {
             Log.d("------redirect:-----", url);
             return false;
         }

        @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {
             etUrl.setText(url);
             Log.d(TAG + "start:", url);
         }

        @Override
         public void onPageFinished(WebView view, String url) {
             HistoryModel historyModel = new HistoryModel();

// 获取浏览器history,包含id,name,url等

            WebHistoryItem item = webview.copyBackForwardList()

                    .getCurrentItem();

//为browser history获取浏览器页面快照

            Picture snapShot = view.capturePicture();

            if (snapShot.getWidth() > 0 ;; snapShot.getHeight() > 0) {
                 Bitmap b = Bitmap.createBitmap(snapShot.getWidth(),
                         snapShot.getHeight(), Bitmap.Config.ARGB_8888);

                Canvas c = new Canvas(b);
                 snapShot.draw(c);

               Bitmap newBitmap = zoomBitmap(b, 250, 250);
                 historyModel.setSnapshot(newBitmap);

// 写入手机sd卡

//                FileOutputStream fos = null;
//                try {
//                    fos = new FileOutputStream("/sdcard/" + item.getTitle()
//                            + ".jpg");
//                    if (fos != null) {
//                        b.compress(Bitmap.CompressFormat.JPEG, 90, fos);
//                        fos.close();
//                    }
//                } catch (Exception e) {
//
//                }
//
//                b = BitmapFactory.decodeFile("/sdcard/" + item.getTitle()
//                        + ".jpg");
             }

            historyModel.setId(item.getId());
             historyModel.setName(item.getTitle());
             historyModel.setUrl(item.getUrl());
             historyModels.add(historyModel);

            Log.d(TAG + "finish:", url);
         }
     };

    /**
      * for #43616 from Hyron
      *
      * @author allen_fang
      *
      */
     private class GeoClient extends WebChromeClient {

        @Override
         public void onGeolocationPermissionsShowPrompt(String origin,
                 Android.webkit.GeolocationPermissions.Callback callback) {
             super.onGeolocationPermissionsShowPrompt(origin, callback);
             callback.invoke(origin, true, false);
         }

        @Override
         public void onProgressChanged(WebView view, int newProgress) {
             mProgressBar.setProgress(newProgress);
             super.onProgressChanged(view, newProgress);
         }

        @Override
         public void getVisitedHistory(ValueCallback<String[]> callback) {
             super.getVisitedHistory(callback);
         }
     }

    @Override
     public void onDownloadStart(String url, String userAgent,
             String contentDisposition, String mimetype, long contentLength) {

        Log.d("--------------------------", mimetype);
         Log.d("--------------------------", url);
         Uri uri = Uri.parse(url);
         Intent intent = new Intent(Intent.ACTION_VIEW, uri);
         startActivity(intent);

    }

    public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {
         int w = bitmap.getWidth();
         int h = bitmap.getHeight();
         Matrix matrix = new Matrix();
         float scaleWidth = ((float) width / w);
         float scaleHeight = ((float) height / h);
         matrix.postScale(scaleWidth, scaleHeight);
         Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
         return newbmp;
     }
}

喜欢0 评分0
游客

返回顶部