android 用webview自制带有history和download功能的浏览器
来源:互联网 发布:mysql如何导入数据语法 编辑:程序博客网 时间:2024/06/06 10:07
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) {
if (snapShot.getWidth() > 0 && snapShot.getHeight() > 0) {
Bitmap b = Bitmap.createBitmap(snapShot.getWidth(),
snapShot.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
// 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;
}
}
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获取浏览器页面快照
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卡
// 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;
}
}
- android 用webview自制带有history和download功能的浏览器
- Android自制浏览器WebView-android学习之旅(64)
- Android 浏览器开发中的小技巧,webview的复制功能
- Iframe和a标签的downLoad新属性实现-调用浏览器的本地下载功能
- Android-用WebView开发简单的浏览器
- 自制Android 文件浏览器
- 带有进度条的WebView
- 带有进度条的WebView
- JavaScript Window History 实现浏览器的 前进 后退 功能
- 带有排序和过滤功能的JTable
- 带有排序和过滤功能的JTable
- Android中WebView加载带有ssl层的https页面
- Download功能的实现
- Android控件WebView(浏览器)常用功能(图片、缩放)例子介绍
- bash 的history 功能
- 浏览器的记录栈和history API的应用
- 【Android WebView】 利用webview实现浏览器的基本功能
- android利用WebView实现浏览器的封装
- Oracle 游标使用全解
- 再次深入到ip_conntrack的conntrack full问题
- 实例详解Spring MVC入门使用
- 在代码中实现按下Home键的效果
- magneto插件下载
- android 用webview自制带有history和download功能的浏览器
- oracle 排序(中文,null的处理)
- 利用SecureCRT在linux与Windows之间传输文件
- Delphi的组件读写机制
- struts2 流程
- linq与sql语法比较
- WPF中ListBox的创建和多种绑定用法
- 检测银行卡号是否正确?
- 抢占式内核与非抢占式内核的区别