android 用webview自制带有history和download功能的浏览器
3184 点击·0 回帖
![]() | ![]() | |
![]() | 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; } } | |
![]() | ![]() |