WebView在日常的使用中主要功能
1.加载网页
2.WebView 是否允许执行JavaScript
3.设置WebView是否缓存网页数据
4.JavaScript本地方法
5.启动本地app
这里需要注意在AndroidManifest.xml 文件中的要启动的activity中添加
<activity
android:name="你的activity"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.VIEW" >
</action>
<category android:name="android.intent.category.DEFAULT" >
</category>
<category android:name="android.intent.category.BROWSABLE" >
</category>
<!-- data中添加和html上要跳转的对应 如本例中就需要在html中添加 m://test.cn/ 当然你也可以在连接中添加参数 m://test.cn/?arg1=&arg2=-->
<data
android:host="test.cn"
android:scheme="m" >
</data>
</intent-filter>
</activity>
然后在处理不是http开头的网址时
Uri uri = Uri.parse(url);
Intent intent = new Intent();
intent.setData(uri);
context.startActivity(intent);
在需要跳转的activity中根据参数处理你需要处理的事情
Uri uri = getIntent().getData();
//参数1
String arg1=uri.getQueryParameter("arg1");
//参数2
String arg2=uri.getQueryParameter("arg2");
以下为本人使用的WebView类
/**
*
* @author 王勇鹏
* @date 2015-3-18
* @Description WebView控制器
*/
public class WebViewController {
private static final String TAG = "WebViewController";
private WebView mWebView;
private Context context;
private boolean isFristLoad = true;
public WebViewController(WebView webView, Context context) {
this.mWebView = webView;
this.context = context;
}
public void addWebChromeClient(final LinearLayout loadingLayout) {
mWebView.setWebViewClient(new WebViewClient() {
/**
* 自定义网页加载
*/
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//当网址不是Http开头的可能为启动本地应用
if (url.startsWith("http")) {
if (isFristLoad) {
isFristLoad = false;
mWebView.loadUrl(url);
} else {
Intent intent = new Intent();
intent.putExtra("URL", url);
intent.putExtra("Title", view.getTitle());
intent.setClass(context, WebViewActivity.class);
context.startActivity(intent);
}
return true;
} else {
Uri uri = Uri.parse(url);
Intent intent = new Intent();
intent.setData(uri);
context.startActivity(intent);
return true;
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.e(TAG, "onPageStarted");
loadingLayout.setVisibility(View.VISIBLE); // 显示加载界面
}
@Override
public void onPageFinished(WebView view, String url) {
String title = view.getTitle();
Log.e(TAG, "onPageFinished WebView title=" + title);
loadingLayout.setVisibility(View.GONE); // 隐藏加载界面
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Log.e(TAG, "加载时出错!");
}
});
}
@SuppressWarnings("deprecation")
@SuppressLint("SetJavaScriptEnabled")
public void initWebView() {
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
// 不使用缓存,只从网络获取数据
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
if (AppFileDir.isExistSDCard()) {
// 根据cache-control决定是否从网络上取数据
mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
// 设置 缓存模式
// 开启 DOM storage API 功能
mWebView.getSettings().setDomStorageEnabled(true);
// 开启 database storage API 功能
mWebView.getSettings().setDatabaseEnabled(true);
String cacheDirPath = AppFileDir.WEBVIEW_CACHE_DIR;
FileUtils.createFileDir(cacheDirPath);
Log.i(TAG, "cacheDirPath=" + cacheDirPath);
// 设置数据库缓存路径
mWebView.getSettings().setDatabasePath(cacheDirPath);
// 设置 Application Caches 缓存目录
mWebView.getSettings().setAppCachePath(cacheDirPath);
// 开启 Application Caches 功能
mWebView.getSettings().setAppCacheEnabled(true);
}
}
//添加javaScript接口
public void putJavascriptInterface(String[] interfaceNames, Object object) {
for (int i = 0; i < interfaceNames.length; i++) {
mWebView.addJavascriptInterface(object, interfaceNames[i]);
}
}
}
controller = new WebViewController(mWebView, WebViewActivity.this);
controller.initWebView();
controller.addWebChromeClient(loadingLayout);