4.0版:参考别人的代码终于实现了多窗口
This commit is contained in:
parent
109cd67b13
commit
aec6ce7b2c
|
@ -1,4 +1,4 @@
|
|||
# Android:海天鹰浏览器
|
||||
基于 Android WebView 组件的浏览器,支持收藏夹、图片广告过滤、视频独立播放。
|
||||
### 主界面
|
||||
# Android:海天鹰浏览器
|
||||
基于 Android WebView 的多窗口浏览器,支持收藏夹、图片广告过滤、视频独立播放。
|
||||
### 主界面
|
||||

|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.hty.browser"
|
||||
android:versionCode="3"
|
||||
android:versionName="3.12">
|
||||
android:versionCode="4"
|
||||
android:versionName="4.0">
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="16"
|
||||
|
@ -38,7 +38,6 @@
|
|||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||
<!-- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>-->
|
||||
<!-- 查询网络状态权限 -->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="andorid.permission.CHANGE_CONFIGURATION"/>
|
||||
|
|
|
@ -9,18 +9,20 @@ p { text-indent:2em; }
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2 align=center><img src=logo.png><br>海天鹰浏览器 V3.12</h2>
|
||||
<h2 align=center><img src=logo.png><br>海天鹰浏览器 V4.0</h2>
|
||||
<p>内置扩展的浏览器。</p>
|
||||
<p>扩展:链接关键字过滤,链接关键字高亮,图片自定义过滤,视频独立播放。</p>
|
||||
<p>作者:黄颖</p>
|
||||
<p>源码:<a href="https://github.com/sonichy/Android_HTYBrowser" target="_blank">https://github.com/sonichy/Android_HTYBrowser</a></p>
|
||||
<p>E-mail:sonichy@163.com</p>
|
||||
<h3>参考:</h3>
|
||||
<p><a href="https://gitee.com/daiji111/flying_browser/blob/master/app/src/main/java/com/daiji/feixiang/BrowserActivity.java">多窗口管理</a></p>
|
||||
<p><a href="https://www.jianshu.com/p/6e38e1ef203a" target="_blank">Android WebView 三种文件下载方式</a></p>
|
||||
<p><a href="https://blog.csdn.net/lowprofile_coding/article/details/77852131" target="_blank">自动安装apk包</a></p>
|
||||
<p><a href="https://stackoverflow.com/questions/3462582/display-the-android-webviews-favicon" target="_blank">获取网页图标</a></p>
|
||||
<h3>更新日志:</h3>
|
||||
<h3>V3.12 (2019-02-25)</h3><ol><li>支持跨域。</li><li>获取网页图标。</li><li>屏蔽百度首页视频百度好看跳转下载。</li><li>Android API 19 以上开启调试,运行 adb devices 连接手机,Chrome 浏览器 chrome://inspect 查看。</li></ol>
|
||||
<h3>V4.0 (2019-02-13)</h3><ol><li>实现多窗口。</li></ol>
|
||||
<h3>V3.12 (2019-02-27)</h3><ol><li>支持跨域。</li><li>获取网页图标。</li><li>屏蔽百度首页视频百度好看跳转下载。</li><li>Android API 19 以上开启调试,运行 adb devices 连接手机,Chrome 浏览器 chrome://inspect 查看。</li><li>增加标题按钮,点击标题按钮显示地址栏,点击网页隐藏地址栏。</li></ol>
|
||||
<h3>V3.11 (2019-02-13)</h3><ol><li>链接中的关键字屏蔽、高亮可设置。</li></ol>
|
||||
<h3>V3.10 (2019-02-10)</h3><ol><li>增加:收藏前修改,收藏后修改,修改校验。</li></ol>
|
||||
<h3>V3.9 (2018-12-20)</h3><ol><li>视频独立播放JS读不到iframe里的video,使用跳转iframe代替。</li></ol>
|
||||
|
|
|
@ -10,14 +10,9 @@ import android.content.DialogInterface;
|
|||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.MenuItem;
|
||||
|
@ -25,7 +20,6 @@ import android.view.View;
|
|||
import android.view.View.OnCreateContextMenuListener;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.webkit.WebIconDatabase;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.AdapterContextMenuInfo;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
|
@ -38,12 +32,7 @@ import android.widget.SimpleCursorAdapter;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
public class FavoriteActivity extends Activity {
|
||||
SimpleCursorAdapter adapter;
|
||||
|
@ -51,7 +40,6 @@ public class FavoriteActivity extends Activity {
|
|||
EditText editText;
|
||||
InputMethodManager IMM;
|
||||
ImageButton imageButton_clear;
|
||||
WebIconDatabase WID;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -66,8 +54,6 @@ public class FavoriteActivity extends Activity {
|
|||
imageButton_clear.setVisibility(View.GONE);
|
||||
search(editText.getText().toString());
|
||||
IMM = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
WID = WebIconDatabase.getInstance();
|
||||
WID.open(getDir("icons", MODE_PRIVATE).getPath());
|
||||
}
|
||||
|
||||
class ButtonListener implements View.OnClickListener {
|
||||
|
@ -190,40 +176,24 @@ public class FavoriteActivity extends Activity {
|
|||
|
||||
void search(String s) {
|
||||
DBHelper helper = new DBHelper(this);
|
||||
Cursor c = helper.query(s);
|
||||
Cursor cursor1 = helper.query(s);
|
||||
String[] from = { "_id", "title", "website", "website" };
|
||||
int[] to = { R.id.id, R.id.title, R.id.website, R.id.imageView_favicon };
|
||||
adapter = new SimpleCursorAdapter(this, R.layout.favorite_row, c, from, to, 0);
|
||||
adapter = new SimpleCursorAdapter(this, R.layout.favorite_row, cursor1, from, to, 0);
|
||||
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){
|
||||
public boolean setViewValue(View view, Cursor cursor, int columnIndex){
|
||||
//Log.e("L192", view.toString() + columnIndex);
|
||||
if(view.getId() == R.id.imageView_favicon){
|
||||
if (view.getId() == R.id.imageView_favicon) {
|
||||
String website = cursor.getString(columnIndex);
|
||||
// if (website.startsWith("https://")) {
|
||||
// //((ImageView) view).setImageResource(android.R.drawable.ic_secure);
|
||||
// Runner1 r1 = new Runner1();
|
||||
// r1.setUrl("https://static.easyicon.net/preview/52/523893.gif");
|
||||
// r1.setView(view);
|
||||
// Thread thread1 = new Thread(r1);
|
||||
// thread1.start();
|
||||
// return true;
|
||||
// } else if (website.startsWith("http://")) {
|
||||
// // ((ImageView) view).setImageResource(android.R.drawable.ic_partial_secure);
|
||||
// Runner1 r1 = new Runner1();
|
||||
// r1.setUrl("https://static.easyicon.net/preview/1/11847.gif");
|
||||
// r1.setView(view);
|
||||
// Thread thread1 = new Thread(r1);
|
||||
// thread1.start();
|
||||
// return true;
|
||||
// } else {
|
||||
// ((ImageView) view).setImageResource(R.drawable.network);
|
||||
// return true;
|
||||
// }
|
||||
Runner1 r1 = new Runner1();
|
||||
r1.setUrl(website);
|
||||
r1.setView(view);
|
||||
Thread thread1 = new Thread(r1);
|
||||
thread1.start();
|
||||
if (website.startsWith("https://")) {
|
||||
((ImageView) view).setImageResource(android.R.drawable.ic_secure);
|
||||
} else if (website.startsWith("http://")) {
|
||||
((ImageView) view).setImageResource(android.R.drawable.ic_partial_secure);
|
||||
} else if (website.startsWith("file://")) {
|
||||
((ImageView) view).setImageResource(android.R.drawable.stat_notify_sdcard);
|
||||
} else {
|
||||
((ImageView) view).setImageResource(R.drawable.network);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -231,32 +201,6 @@ public class FavoriteActivity extends Activity {
|
|||
});
|
||||
listView.setAdapter(adapter);
|
||||
|
||||
// WebIconDatabase WID = WebIconDatabase.getInstance();
|
||||
// WID.open(getDir("icons", MODE_PRIVATE).getPath());
|
||||
// for (int i=0; i<adapter.getCount(); i++) {
|
||||
// LinearLayout layout = (LinearLayout) listView.getAdapter().getView(i, null, null);
|
||||
// String website = ((TextView) layout.findViewById(R.id.website)).getText().toString();
|
||||
// if (website.startsWith("https://")) {
|
||||
// Log.e("star_big_on", website);
|
||||
// ImageView imageView = (ImageView) layout.findViewById(R.id.imageView_favicon);
|
||||
// imageView.setImageResource(android.R.drawable.star_big_on);
|
||||
// } else if (website.startsWith("http://")){
|
||||
// ImageView imageView = (ImageView) layout.findViewById(R.id.imageView_favicon);
|
||||
// imageView.setImageResource(android.R.drawable.star_big_off);
|
||||
// Log.e("star_big_off", website);
|
||||
// } else {
|
||||
// Log.e("earth", website);
|
||||
// }
|
||||
// WID.requestIconForPageUrl(website, new WebIconDatabase.IconListener() {
|
||||
// public void onReceivedIcon(String url, Bitmap icon) {
|
||||
// Log.e("onReceivedIcon", url);
|
||||
// ImageView imageView = (ImageView) layout.findViewById(R.id.imageView_favicon);
|
||||
// imageView.setImageBitmap(icon);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// adapter.notifyDataSetChanged();
|
||||
|
||||
listView.setOnItemClickListener(new OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
|
||||
|
@ -306,72 +250,4 @@ public class FavoriteActivity extends Activity {
|
|||
}
|
||||
}
|
||||
|
||||
public Bitmap webBitMap(String surl) {
|
||||
URL url = null;
|
||||
Bitmap bitmap = null;
|
||||
try {
|
||||
url = new URL(surl);
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.setDoInput(true);
|
||||
conn.connect();
|
||||
InputStream IS = conn.getInputStream();
|
||||
bitmap = BitmapFactory.decodeStream(IS);
|
||||
IS.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
class Runner1 implements Runnable {
|
||||
private String surl;
|
||||
private View view;
|
||||
|
||||
private void setUrl(String surl1) {
|
||||
surl = surl1;
|
||||
}
|
||||
|
||||
private void setView(View view1) {
|
||||
view = view1;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
// Bitmap bitmap = webBitMap(surl);
|
||||
// Message msg = new Message();
|
||||
// Bundle bundle = new Bundle();
|
||||
// bundle.putParcelable("bitmap", bitmap);
|
||||
// msg.setData(bundle);
|
||||
// msg.obj = view;
|
||||
// handler.sendMessage(msg);
|
||||
Log.e("L350", surl);
|
||||
WID.requestIconForPageUrl(surl, new WebIconDatabase.IconListener() {
|
||||
public void onReceivedIcon(String url, Bitmap icon) {
|
||||
Log.e("L353", url);
|
||||
Message msg = new Message();
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelable("bitmap", icon);
|
||||
msg.setData(bundle);
|
||||
msg.obj = view;
|
||||
handler.sendMessage(msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static Handler handler = new Handler(){
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
Bundle bundle = msg.getData();
|
||||
Bitmap bitmap = bundle.getParcelable("bitmap");
|
||||
View view = (View) msg.obj;
|
||||
Log.e("L372", "setIcon");
|
||||
((ImageView) view).setImageBitmap(bitmap);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
|
@ -34,6 +34,7 @@ import android.content.pm.PackageManager;
|
|||
import android.content.res.Configuration;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.media.MediaScannerConnection;
|
||||
|
@ -76,23 +77,25 @@ import android.webkit.WebView.FindListener;
|
|||
import android.webkit.WebView.HitTestResult;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class MainActivity extends Activity {
|
||||
Button button_title, button_page;
|
||||
TextView findCount;
|
||||
EditText editText1, findText;
|
||||
ImageButton btnGo, btnBack, btnForward, btnMenu, findPrev, findNext, findClose, imageButton_info;
|
||||
WebView webView1;
|
||||
// RelativeLayout RelativeLayout1;
|
||||
LinearLayout LinearLayout1, LinearLayout2;
|
||||
FrameLayout video, findbar;
|
||||
FrameLayout webViewLayout, video, findbar;
|
||||
ImageView imageView1;
|
||||
InputMethodManager IMM;
|
||||
ProgressBar pgb1;
|
||||
|
@ -105,6 +108,8 @@ public class MainActivity extends Activity {
|
|||
SharedPreferences sharedPreferences;
|
||||
Thread CU;
|
||||
long downloadIdUpdate;
|
||||
List<WebView> list_webView = new ArrayList<>();
|
||||
int currentPage;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -117,14 +122,12 @@ public class MainActivity extends Activity {
|
|||
dir.mkdirs();
|
||||
}
|
||||
setContentView(R.layout.activity_main);
|
||||
//ptitle = "百度";
|
||||
//urln = "http//www.baidu.com";
|
||||
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
|
||||
|
||||
LinearLayout1 = (LinearLayout) findViewById(R.id.LinearLayout1);
|
||||
LinearLayout2 = (LinearLayout) findViewById(R.id.LinearLayout2);
|
||||
// RelativeLayout1 = (RelativeLayout)
|
||||
// findViewById(R.id.RelativeLayout1);
|
||||
// RelativeLayout1 = (RelativeLayout) findViewById(R.id.RelativeLayout1);
|
||||
webViewLayout = (FrameLayout) findViewById(R.id.webViewLayout);
|
||||
video = (FrameLayout) findViewById(R.id.video);
|
||||
findbar = (FrameLayout) findViewById(R.id.findbar);
|
||||
pgb1 = (ProgressBar) findViewById(R.id.progressBar1);
|
||||
|
@ -155,7 +158,10 @@ public class MainActivity extends Activity {
|
|||
findNext = (ImageButton) findViewById(R.id.findNext);
|
||||
findClose = (ImageButton) findViewById(R.id.findClose);
|
||||
imageButton_info = (ImageButton) findViewById(R.id.imageButton_info);
|
||||
// imageView1.setAlpha(100);
|
||||
button_title = (Button) findViewById(R.id.button_title);
|
||||
button_page = (Button) findViewById(R.id.button_page);
|
||||
button_title.setOnClickListener(new ButtonListener());
|
||||
button_page.setOnClickListener(new ButtonListener());
|
||||
btnGo.setOnClickListener(new ButtonListener());
|
||||
btnBack.setOnClickListener(new ButtonListener());
|
||||
btnForward.setOnClickListener(new ButtonListener());
|
||||
|
@ -165,218 +171,9 @@ public class MainActivity extends Activity {
|
|||
findNext.setOnClickListener(new ButtonListener());
|
||||
findClose.setOnClickListener(new ButtonListener());
|
||||
editText1 = (EditText) findViewById(R.id.EditText1);
|
||||
webView1 = (WebView) findViewById(R.id.WebView1);
|
||||
editText1.setVisibility(View.GONE);
|
||||
WebIconDatabase.getInstance().open(getDir("icons", MODE_PRIVATE).getPath()); //获取图标数据库路径
|
||||
registerForContextMenu(webView1);
|
||||
// 开启JS
|
||||
webView1.getSettings().setJavaScriptEnabled(true);
|
||||
// 开启JS能打开窗口
|
||||
webView1.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
|
||||
// 开启缓存
|
||||
webView1.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
|
||||
// 自适应屏幕
|
||||
webView1.getSettings().setUseWideViewPort(true);
|
||||
webView1.getSettings().setLoadWithOverviewMode(true);
|
||||
// 支持缩放
|
||||
webView1.getSettings().setSupportZoom(true);
|
||||
// 启用内置缩放控件
|
||||
webView1.getSettings().setBuiltInZoomControls(true);
|
||||
// 隐藏缩放控件
|
||||
webView1.getSettings().setDisplayZoomControls(false);
|
||||
// 开启访问文件
|
||||
webView1.getSettings().setAllowFileAccess(true);
|
||||
// 开启数据库
|
||||
webView1.getSettings().setDatabaseEnabled(true);
|
||||
// 开启localStorage
|
||||
webView1.getSettings().setDomStorageEnabled(true);
|
||||
// 开启定位
|
||||
webView1.getSettings().setGeolocationEnabled(true);
|
||||
// 支持多窗口
|
||||
webView1.getSettings().supportMultipleWindows();
|
||||
// 支持获取手势焦点
|
||||
webView1.requestFocusFromTouch();
|
||||
// 允许跨域
|
||||
webView1.getSettings().setAllowUniversalAccessFromFileURLs(true);
|
||||
// 允许调试
|
||||
if(Build.VERSION.SDK_INT >= 19) {
|
||||
webView1.setWebContentsDebuggingEnabled(true);
|
||||
}
|
||||
|
||||
webView1.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
Log.e("OverrideUrlLoading", url);
|
||||
// 协议过滤
|
||||
if(url.startsWith("http") && !url.startsWith("https://cdn-haokanapk.baidu.com/")){
|
||||
view.loadUrl(url);
|
||||
}
|
||||
/*
|
||||
else if(url.startsWith("tbopen://")){
|
||||
Intent intent = new Intent();
|
||||
intent.setAction("android.intent.action.VIEW");
|
||||
Uri uri = Uri.parse(url);
|
||||
intent.setData(uri);
|
||||
intent.setClassName("com.taobao.taobao", "com.taobao.tao.detail.activity.DetailActivity");
|
||||
startActivity(intent);
|
||||
}
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||
//super.onPageStarted(view, url, favicon);
|
||||
editText1.setText(url);
|
||||
urln = url;
|
||||
btnBack.setEnabled(true);
|
||||
IMM.hideSoftInputFromWindow(editText1.getWindowToken(), 0);
|
||||
pgb1.setVisibility(View.VISIBLE);
|
||||
imageButton_info.setImageResource(android.R.drawable.ic_menu_info_details);
|
||||
// if(favicon != null) {
|
||||
// imageButton_info.setImageBitmap(favicon);
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
super.onPageFinished(view, url);
|
||||
pgb1.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
|
||||
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||
Toast.makeText(getApplicationContext(), "ReceivedError:" + errorCode, Toast.LENGTH_SHORT).show();
|
||||
if (isNetworkConnected()) {
|
||||
switch(errorCode){
|
||||
case WebViewClient.ERROR_HOST_LOOKUP: // 找不到主机,跳转百度搜索
|
||||
Log.e("ErrorHostLookup", failingUrl);
|
||||
String url = "http://m.baidu.com/s?word=" + urlo;
|
||||
editText1.setText(url);
|
||||
webView1.loadUrl(url);
|
||||
urln = url;
|
||||
break;
|
||||
case WebViewClient.ERROR_UNSUPPORTED_SCHEME:
|
||||
Log.e("ErrorUnsupportedScheme",failingUrl);
|
||||
}
|
||||
} else {
|
||||
webView1.loadDataWithBaseURL(
|
||||
"",
|
||||
"<html><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"/><style>h1{font-size:10vw;margin:40vh auto;text-align:center;}</style><h1>网络未连接</h1></html>",
|
||||
"text/html", "utf-8", "");
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
webView1.setWebChromeClient(new WebChromeClient() {
|
||||
|
||||
// JS的alert('')提示信息转换成安卓控件提示信息
|
||||
@Override
|
||||
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
|
||||
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
||||
result.confirm();
|
||||
return true;
|
||||
}
|
||||
|
||||
// HTML5.input.file转换为安卓文件选择器
|
||||
@Override
|
||||
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams fileChooserParams) {
|
||||
openFileChooserImplForAndroid5(uploadMsg);
|
||||
return true;
|
||||
}
|
||||
|
||||
// 进度条
|
||||
@Override
|
||||
public void onProgressChanged(WebView view, int newProgress) {
|
||||
super.onProgressChanged(view, newProgress);
|
||||
pgb1.setProgress(newProgress);
|
||||
if(sharedPreferences.getBoolean("switch_adBlock",true)){
|
||||
ADBlock();
|
||||
}
|
||||
if(sharedPreferences.getBoolean("switch_iframeBlock",false)) {
|
||||
if (!view.getUrl().contains("baidu.com")){
|
||||
iframeBlock();
|
||||
}
|
||||
}
|
||||
// 链接关键字屏蔽
|
||||
if(sharedPreferences.getBoolean("switch_filter",false)){
|
||||
String sf = sharedPreferences.getString("filter","");
|
||||
if(!sf.equals("")) {
|
||||
String js = "javascript:var s='"+sf+"';var sl=s.split(';');var a=document.getElementsByTagName('a');for(var i=0;i<a.length;i++){for(var j=0;j<sl.length;j++){if(a[i].textContent.indexOf(sl[j])!=-1){a[i].textContent='';}}}";
|
||||
view.loadUrl(js);
|
||||
}
|
||||
}
|
||||
// 链接关键字高亮
|
||||
if(sharedPreferences.getBoolean("switch_highlight",false)){
|
||||
String shl = sharedPreferences.getString("highlight","");
|
||||
if(!shl.equals("")) {
|
||||
String js = "javascript:var s='"+shl+"';var sl=s.split(';');var a=document.getElementsByTagName('a');for(var i=0;i<a.length;i++){for(var j=0;j<sl.length;j++){if(a[i].textContent.indexOf(sl[j])!=-1){a[i].style.color='white';a[i].style.backgroundColor='#DA3434';}}}";
|
||||
view.loadUrl(js);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取网页标题
|
||||
@Override
|
||||
public void onReceivedTitle(WebView view, String title) {
|
||||
super.onReceivedTitle(view, title);
|
||||
ptitle = title;
|
||||
}
|
||||
|
||||
// 接收网站图标(favicon)
|
||||
public void onReceivedIcon(WebView view, Bitmap icon) {
|
||||
imageButton_info.setImageBitmap(icon);
|
||||
}
|
||||
|
||||
// 播放网络视频时全屏会被调用的方法
|
||||
@Override
|
||||
public void onShowCustomView(View view, CustomViewCallback callback) {
|
||||
Log.e("onShowCustomView", "onShowCustomView");
|
||||
//Toast.makeText(getApplicationContext(), "onShowCustomView", Toast.LENGTH_SHORT).show();
|
||||
customViewCallback = callback;
|
||||
// 将video放到当前视图中
|
||||
video.addView(view);
|
||||
// 设置全屏
|
||||
setFullScreen();
|
||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
|
||||
// 视频播放退出全屏会被调用的
|
||||
@Override
|
||||
public void onHideCustomView() {
|
||||
Log.e("onHideCustomView", "onHideCustomView");
|
||||
//Toast.makeText(getApplicationContext(), "onHideCustomView", Toast.LENGTH_SHORT).show();
|
||||
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
// 退出全屏
|
||||
// quitFullScreen();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
|
||||
Log.d("onConsoleMessage", consoleMessage.message() + " at " + consoleMessage.sourceId() + ":" + consoleMessage.lineNumber());
|
||||
return super.onConsoleMessage(consoleMessage);
|
||||
}
|
||||
|
||||
// 定位权限
|
||||
@Override
|
||||
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
|
||||
callback.invoke(origin, true, false);
|
||||
super.onGeolocationPermissionsShowPrompt(origin, callback);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
webView1.setDownloadListener(new MyWebViewDownLoadListener());
|
||||
|
||||
webView1.setOnTouchListener(new OnTouchListener() {
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
webView1.requestFocus();
|
||||
IMM.hideSoftInputFromWindow(editText1.getWindowToken(), 0);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
newWindow();
|
||||
|
||||
editText1.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
||||
@Override
|
||||
|
@ -393,7 +190,7 @@ public class MainActivity extends Activity {
|
|||
@Override
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
|
||||
webView1.findAllAsync(findText.getText().toString());
|
||||
list_webView.get(currentPage).findAllAsync(findText.getText().toString());
|
||||
IMM.hideSoftInputFromWindow(findText.getWindowToken(), 0);
|
||||
return true;
|
||||
}
|
||||
|
@ -408,7 +205,7 @@ public class MainActivity extends Activity {
|
|||
// start 输入框中改变后的字符串的起始位置
|
||||
// before 输入框中改变前的字符串的位置 默认为0
|
||||
// count 输入框中改变后的一共输入字符串的数量
|
||||
webView1.findAllAsync(text.toString());
|
||||
list_webView.get(currentPage).findAllAsync(text.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -433,13 +230,6 @@ public class MainActivity extends Activity {
|
|||
loadPage(sharedPreferences.getString("homepage","http://www.baidu.com"));
|
||||
}
|
||||
|
||||
webView1.setFindListener(new FindListener() {
|
||||
@Override
|
||||
public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches,
|
||||
boolean isDoneCounting) {
|
||||
findCount.setText(activeMatchOrdinal + "/" + numberOfMatches);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
CU = new Thread() {
|
||||
|
@ -512,20 +302,51 @@ public class MainActivity extends Activity {
|
|||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.button_title:
|
||||
button_title.setVisibility(View.GONE);
|
||||
editText1.setVisibility(View.VISIBLE);
|
||||
break;
|
||||
case R.id.button_page:
|
||||
List<String> list_title = new ArrayList<>();
|
||||
for (int i = 0 ; i < list_webView.size() ; i++) {
|
||||
list_title.add(i + 1 + "." + list_webView.get(i).getTitle());
|
||||
}
|
||||
String[] titles = list_title.toArray(new String[list_title.size()]);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
||||
builder.setTitle("窗口");
|
||||
builder.setIcon(android.R.drawable.ic_menu_slideshow);
|
||||
builder.setItems(titles, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
if(which != currentPage) {
|
||||
webViewLayout.removeAllViews();
|
||||
WebView webView = list_webView.get(which);
|
||||
webViewLayout.addView(webView);
|
||||
button_page.setText(which + 1 + "");
|
||||
button_title.setText(webView.getTitle());
|
||||
editText1.setText(webView.getUrl());
|
||||
imageButton_info.setImageBitmap(webView.getFavicon());
|
||||
currentPage = which;
|
||||
}
|
||||
}
|
||||
});
|
||||
builder.create().show();
|
||||
break;
|
||||
case R.id.ImageButtonGo:
|
||||
loadPage(editText1.getText().toString());
|
||||
break;
|
||||
case R.id.ImageButtonBack:
|
||||
if (webView1.canGoBack()) {
|
||||
webView1.goBack();
|
||||
if (list_webView.get(currentPage).canGoBack()) {
|
||||
list_webView.get(currentPage).goBack();
|
||||
btnForward.setEnabled(true);
|
||||
} else {
|
||||
btnBack.setEnabled(false);
|
||||
}
|
||||
break;
|
||||
case R.id.ImageButtonForward:
|
||||
if (webView1.canGoForward()) {
|
||||
webView1.goForward();
|
||||
if (list_webView.get(currentPage).canGoForward()) {
|
||||
list_webView.get(currentPage).goForward();
|
||||
btnBack.setEnabled(true);
|
||||
} else {
|
||||
btnForward.setEnabled(false);
|
||||
|
@ -539,10 +360,10 @@ public class MainActivity extends Activity {
|
|||
imageView1.setVisibility(View.GONE);
|
||||
break;
|
||||
case R.id.findPrev:
|
||||
webView1.findNext(false);
|
||||
list_webView.get(currentPage).findNext(false);
|
||||
break;
|
||||
case R.id.findNext:
|
||||
webView1.findNext(true);
|
||||
list_webView.get(currentPage).findNext(true);
|
||||
break;
|
||||
case R.id.findClose:
|
||||
findText.setText("");
|
||||
|
@ -589,7 +410,7 @@ public class MainActivity extends Activity {
|
|||
public boolean onContextItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case 0:
|
||||
webView1.loadUrl(HTRE);
|
||||
list_webView.get(currentPage).loadUrl(HTRE);
|
||||
break;
|
||||
case 1:
|
||||
ClipboardManager mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
|
@ -614,8 +435,8 @@ public class MainActivity extends Activity {
|
|||
break;
|
||||
case 5:
|
||||
String js = "javascript:var imgs=document.getElementsByTagName('img');for(i=0;i<imgs.length;i++){if(imgs[i].src=='" + HTRE +"'){imgs[i].style.display='none';break;}}";
|
||||
webView1.loadUrl(js);
|
||||
break;
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -627,8 +448,8 @@ public class MainActivity extends Activity {
|
|||
imageView1.setVisibility(View.GONE);
|
||||
quitFullScreen();
|
||||
} else {
|
||||
if (webView1.canGoBack()) {
|
||||
webView1.goBack();
|
||||
if (list_webView.get(currentPage).canGoBack()) {
|
||||
list_webView.get(currentPage).goBack();
|
||||
} else {
|
||||
// moveTaskToBack(false);
|
||||
// MenuDialog();
|
||||
|
@ -637,20 +458,18 @@ public class MainActivity extends Activity {
|
|||
return true;
|
||||
}
|
||||
if (keyCode == KeyEvent.KEYCODE_ENTER) {
|
||||
webView1.findAllAsync(findText.getText().toString());
|
||||
list_webView.get(currentPage).findAllAsync(findText.getText().toString());
|
||||
IMM.hideSoftInputFromWindow(findText.getWindowToken(), 0);
|
||||
return true;
|
||||
}
|
||||
if (keyCode == KeyEvent.KEYCODE_F) {
|
||||
findbar.setVisibility(View.VISIBLE);
|
||||
findText.requestFocus();
|
||||
webView1.findAllAsync(findText.getText().toString());
|
||||
list_webView.get(currentPage).findAllAsync(findText.getText().toString());
|
||||
return true;
|
||||
}
|
||||
if (keyCode == KeyEvent.KEYCODE_ESCAPE) {
|
||||
findbar.setVisibility(View.GONE);
|
||||
// Toast.makeText(getApplicationContext(), "Esc Pressed",
|
||||
// Toast.LENGTH_SHORT).show();
|
||||
return true;
|
||||
}
|
||||
return super.onKeyDown(keyCode, event);
|
||||
|
@ -665,7 +484,7 @@ public class MainActivity extends Activity {
|
|||
Log.e("webview", url);
|
||||
IMM.hideSoftInputFromWindow(editText1.getWindowToken(), 0);
|
||||
findText.setText("");
|
||||
webView1.loadUrl(url);
|
||||
list_webView.get(currentPage).loadUrl(url);
|
||||
// btnBack.setEnabled(true);
|
||||
}
|
||||
|
||||
|
@ -691,7 +510,7 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
if (requestCode == 0) {
|
||||
if (intent != null)
|
||||
webView1.loadUrl(intent.getStringExtra("url"));
|
||||
list_webView.get(currentPage).loadUrl(intent.getStringExtra("url"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -779,16 +598,16 @@ public class MainActivity extends Activity {
|
|||
|
||||
void pauseVideo() {
|
||||
String js = "javascript:var obj = document.getElementsByTagName('video');for (var i = 0; i < obj.length; i++) { obj[i].pause();}";
|
||||
webView1.loadUrl(js);
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
}
|
||||
|
||||
void playVideo() {
|
||||
String js = "javascript:var obj = document.getElementsByTagName('video');for (var i = 0; i < obj.length; i++) { obj[i].play();}";
|
||||
webView1.loadUrl(js);
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
}
|
||||
|
||||
void MenuDialog() {
|
||||
String[] items = { "收藏当前页", "收藏夹", "查找", "分享", "视频独立播放", "查看源码", "主页", "全屏", "广告过滤规则", "设置", "检查更新", "关于", "退出" };
|
||||
String[] items = { "新建窗口", "关闭当前窗口", "收藏当前页", "收藏夹", "查找", "分享", "视频独立播放", "查看源码", "主页", "全屏", "广告过滤规则", "设置", "检查更新", "关于", "退出" };
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle("菜单");
|
||||
builder.setIcon(R.drawable.ic_launcher);
|
||||
|
@ -798,6 +617,24 @@ public class MainActivity extends Activity {
|
|||
dialog.dismiss();
|
||||
switch (which) {
|
||||
case 0:
|
||||
newWindow();
|
||||
break;
|
||||
case 1:
|
||||
list_webView.remove(currentPage);
|
||||
if(list_webView.size() == 0){
|
||||
newWindow();
|
||||
}else{
|
||||
currentPage--;
|
||||
button_page.setText(currentPage + 1 + "");
|
||||
webViewLayout.removeAllViews();
|
||||
WebView webView = list_webView.get(currentPage);
|
||||
webViewLayout.addView(webView);
|
||||
button_title.setText(webView.getTitle());
|
||||
editText1.setText(webView.getUrl());
|
||||
imageButton_info.setImageBitmap(webView.getFavicon());
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
LinearLayout layout = new LinearLayout(MainActivity.this);
|
||||
layout.setOrientation(LinearLayout.VERTICAL);
|
||||
final EditText ET_title = new EditText(MainActivity.this);
|
||||
|
@ -809,7 +646,8 @@ public class MainActivity extends Activity {
|
|||
ET_url.setText(urln);
|
||||
layout.addView(ET_url);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
||||
Bitmap icon = webView1.getFavicon();
|
||||
Bitmap icon = list_webView.get(currentPage).getFavicon();
|
||||
if(icon == null) icon = BitmapFactory.decodeResource(getResources(), R.drawable.network);
|
||||
Matrix matrix = new Matrix();
|
||||
matrix.postScale((float)100/icon.getWidth(), (float)100/icon.getHeight());
|
||||
Bitmap bitmap = Bitmap.createBitmap(icon, 0, 0, icon.getWidth(), icon.getHeight(), matrix, true);
|
||||
|
@ -884,53 +722,53 @@ public class MainActivity extends Activity {
|
|||
});
|
||||
builder.create().show();
|
||||
break;
|
||||
case 1:
|
||||
case 3:
|
||||
Intent intent = new Intent(MainActivity.this, FavoriteActivity.class);
|
||||
startActivityForResult(intent, 0);
|
||||
break;
|
||||
case 2:
|
||||
case 4:
|
||||
findbar.setVisibility(View.VISIBLE);
|
||||
findText.requestFocus();
|
||||
webView1.findAllAsync(findText.getText().toString());
|
||||
list_webView.get(currentPage).findAllAsync(findText.getText().toString());
|
||||
break;
|
||||
case 3:
|
||||
case 5:
|
||||
intent = new Intent();
|
||||
intent.setAction(Intent.ACTION_SEND);
|
||||
intent.putExtra(Intent.EXTRA_TEXT, webView1.getUrl());
|
||||
intent.putExtra(Intent.EXTRA_TEXT, list_webView.get(currentPage).getUrl());
|
||||
intent.setType("text/plain");
|
||||
startActivity(Intent.createChooser(intent, "分享"));
|
||||
break;
|
||||
case 4:
|
||||
String js = "javascript:var videos=document.getElementsByTagName('video'); if(videos.length!=0){ var url=videos[0].src; document.body.innerHTML=''; var video=document.createElement('video'); video.style.width='100%'; video.style.height='auto'; video.src=url; video.controls=true; document.body.appendChild(video); var a=document.createElement('a'); a.textContent=url; a.href=url; document.body.appendChild(a); } else { var iframes=document.getElementsByTagName('iframe'); if(iframes.length!=0) window.location.href=iframes[0].src; }";
|
||||
webView1.loadUrl(js);
|
||||
break;
|
||||
case 5:
|
||||
js = "javascript:var s='<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'; document.body.innerHTML=''; var pre=document.createElement('pre'); document.body.appendChild(pre); pre.textContent=s;";
|
||||
webView1.loadUrl(js);
|
||||
break;
|
||||
case 6:
|
||||
webView1.loadUrl(sharedPreferences.getString("homepage",""));
|
||||
String js = "javascript:var videos=document.getElementsByTagName('video'); if(videos.length!=0){ var url=videos[0].src; document.body.innerHTML=''; var video=document.createElement('video'); video.style.width='100%'; video.style.height='auto'; video.src=url; video.controls=true; document.body.appendChild(video); var a=document.createElement('a'); a.textContent=url; a.href=url; document.body.appendChild(a); } else { var iframes=document.getElementsByTagName('iframe'); if(iframes.length!=0) window.location.href=iframes[0].src; }";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
break;
|
||||
case 7:
|
||||
js = "javascript:var s='<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'; document.body.innerHTML=''; var pre=document.createElement('pre'); document.body.appendChild(pre); pre.textContent=s;";
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
break;
|
||||
case 8:
|
||||
list_webView.get(currentPage).loadUrl(sharedPreferences.getString("homepage",""));
|
||||
break;
|
||||
case 9:
|
||||
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
LinearLayout2.setVisibility(View.GONE);
|
||||
pgb1.setVisibility(View.GONE);
|
||||
isFullScreen = true;
|
||||
break;
|
||||
case 8:
|
||||
case 10:
|
||||
DialogBlockList();
|
||||
break;
|
||||
case 9:
|
||||
case 11:
|
||||
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
|
||||
break;
|
||||
case 10:
|
||||
case 12:
|
||||
isManualCheckUpdate = true;
|
||||
new Thread(CU).start();
|
||||
break;
|
||||
case 11:
|
||||
webView1.loadUrl("file:///android_asset/about.htm");
|
||||
case 13:
|
||||
list_webView.get(currentPage).loadUrl("file:///android_asset/about.htm");
|
||||
break;
|
||||
case 12:
|
||||
case 14:
|
||||
MainActivity.this.finish();
|
||||
break;
|
||||
}
|
||||
|
@ -1090,6 +928,7 @@ public class MainActivity extends Activity {
|
|||
ostream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
return "";
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -1104,13 +943,13 @@ public class MainActivity extends Activity {
|
|||
rules = rules.substring(0, rules.length() - 1);
|
||||
}
|
||||
String js = "javascript:var rules='" + rules + "';var rule=new Array();rule=rules.split(',');var img=document.getElementsByTagName('img');for(i=0;i<img.length;i++){for(j=0;j<rule.length;j++){if(img[i].src.indexOf(rule[j])!=-1){img[i].style.display='none';}}}";
|
||||
webView1.loadUrl(js);
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
}
|
||||
}
|
||||
|
||||
void iframeBlock(){
|
||||
String js = "javascript:var iframes=document.getElementsByTagName('iframe');for(i=0;i<iframes.length;i++){iframes[i].style.display='none';}document.getElementById('win-pop-foot').style.display='none';document.getElementById('win-pop-foot1').style.display='none';";
|
||||
webView1.loadUrl(js);
|
||||
list_webView.get(currentPage).loadUrl(js);
|
||||
}
|
||||
|
||||
// 调用系统下载,https://www.jianshu.com/p/6e38e1ef203a
|
||||
|
@ -1124,7 +963,7 @@ public class MainActivity extends Activity {
|
|||
// 设置通知栏的标题,如果不设置,默认使用文件名
|
||||
// request.setTitle("This is title");
|
||||
// 设置通知栏的描述
|
||||
request.setDescription(surl);
|
||||
request.setDescription(surl);
|
||||
// 允许在计费流量下下载
|
||||
request.setAllowedOverMetered(false);
|
||||
// 允许该记录在下载管理界面可见
|
||||
|
@ -1163,8 +1002,8 @@ public class MainActivity extends Activity {
|
|||
Log.e("Version", versionS + " > " + versionL + " ?");
|
||||
String[] AVersionS = versionS.split("\\.");
|
||||
String[] AVersionL = versionL.split("\\.");
|
||||
//Log.e("Version: ", AVersionS[0] + " > " + AVersionL[0] + " ? " + AVersionS[1] + " > " + AVersionL[1] + " ?");
|
||||
if ((Integer.parseInt(AVersionS[0]) > Integer.parseInt(AVersionL[0])) || (Integer.parseInt(AVersionS[1]) > Integer.parseInt(AVersionL[1]))) {
|
||||
Log.e("Version", "(" + AVersionS[0] + " > " + AVersionL[0] + ") && (" + AVersionS[1] + " > " + AVersionL[1] + ")");
|
||||
if ((Integer.parseInt(AVersionS[0]) > Integer.parseInt(AVersionL[0])) || (Integer.parseInt(AVersionS[0]) == Integer.parseInt(AVersionL[0]) && Integer.parseInt(AVersionS[1]) > Integer.parseInt(AVersionL[1]))) {
|
||||
Looper.prepare();
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
||||
builder.setIcon(R.drawable.ic_launcher);
|
||||
|
@ -1221,4 +1060,240 @@ public class MainActivity extends Activity {
|
|||
}
|
||||
}
|
||||
|
||||
void newWindow(){
|
||||
WebView webView = new WebView(MainActivity.this);
|
||||
setWebView(webView);
|
||||
webView.loadUrl(sharedPreferences.getString("homepage","http://www.baidu.com"));
|
||||
webViewLayout.removeAllViews();
|
||||
webViewLayout.addView(webView);
|
||||
list_webView.add(webView);
|
||||
currentPage = list_webView.size() - 1;
|
||||
button_page.setText(currentPage + 1 + "");
|
||||
list_webView.get(currentPage).setFindListener(new FindListener() {
|
||||
@Override
|
||||
public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches, boolean isDoneCounting) {
|
||||
findCount.setText(activeMatchOrdinal + "/" + numberOfMatches);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void setWebView(final WebView webView){
|
||||
// 支持获取手势焦点
|
||||
webView.requestFocusFromTouch();
|
||||
// 允许调试
|
||||
if(Build.VERSION.SDK_INT >= 19) {
|
||||
webView.setWebContentsDebuggingEnabled(true);
|
||||
}
|
||||
WebSettings webSettings = webView.getSettings();
|
||||
// 开启JS
|
||||
webSettings.setJavaScriptEnabled(true);
|
||||
// 开启JS能打开窗口
|
||||
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
|
||||
// 开启缓存
|
||||
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
|
||||
// 自适应屏幕
|
||||
webSettings.setUseWideViewPort(true);
|
||||
webSettings.setLoadWithOverviewMode(true);
|
||||
// 支持缩放
|
||||
webSettings.setSupportZoom(true);
|
||||
// 启用内置缩放控件
|
||||
webSettings.setBuiltInZoomControls(true);
|
||||
// 隐藏缩放控件
|
||||
webSettings.setDisplayZoomControls(false);
|
||||
// 开启访问文件
|
||||
webSettings.setAllowFileAccess(true);
|
||||
// 开启数据库
|
||||
webSettings.setDatabaseEnabled(true);
|
||||
// 开启localStorage
|
||||
webSettings.setDomStorageEnabled(true);
|
||||
// 开启定位
|
||||
webSettings.setGeolocationEnabled(true);
|
||||
// 支持多窗口
|
||||
webSettings.supportMultipleWindows();
|
||||
// 允许跨域
|
||||
webSettings.setAllowUniversalAccessFromFileURLs(true);
|
||||
|
||||
webView.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
Log.e("OverrideUrlLoading", url);
|
||||
// 协议过滤
|
||||
if(url.startsWith("http") && !url.startsWith("https://cdn-haokanapk.baidu.com/")){
|
||||
view.loadUrl(url);
|
||||
}
|
||||
/*
|
||||
else if(url.startsWith("tbopen://")){
|
||||
Intent intent = new Intent();
|
||||
intent.setAction("android.intent.action.VIEW");
|
||||
Uri uri = Uri.parse(url);
|
||||
intent.setData(uri);
|
||||
intent.setClassName("com.taobao.taobao", "com.taobao.tao.detail.activity.DetailActivity");
|
||||
startActivity(intent);
|
||||
}
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||
//super.onPageStarted(view, url, favicon);
|
||||
button_title.setText(url);
|
||||
button_title.setVisibility(View.VISIBLE);
|
||||
editText1.setText(url);
|
||||
editText1.setVisibility(View.GONE);
|
||||
urln = url;
|
||||
btnBack.setEnabled(true);
|
||||
IMM.hideSoftInputFromWindow(editText1.getWindowToken(), 0);
|
||||
pgb1.setVisibility(View.VISIBLE);
|
||||
imageButton_info.setImageResource(android.R.drawable.ic_menu_info_details);
|
||||
// if(favicon != null) {
|
||||
// imageButton_info.setImageBitmap(favicon);
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
super.onPageFinished(view, url);
|
||||
pgb1.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
|
||||
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||
Toast.makeText(getApplicationContext(), "ReceivedError:" + errorCode, Toast.LENGTH_SHORT).show();
|
||||
if (isNetworkConnected()) {
|
||||
switch(errorCode){
|
||||
case WebViewClient.ERROR_HOST_LOOKUP: // 找不到主机,跳转百度搜索
|
||||
Log.e("ErrorHostLookup", failingUrl);
|
||||
String url = "http://m.baidu.com/s?word=" + urlo;
|
||||
editText1.setText(url);
|
||||
webView.loadUrl(url);
|
||||
urln = url;
|
||||
break;
|
||||
case WebViewClient.ERROR_UNSUPPORTED_SCHEME:
|
||||
Log.e("ErrorUnsupportedScheme",failingUrl);
|
||||
}
|
||||
} else {
|
||||
webView.loadDataWithBaseURL(
|
||||
"",
|
||||
"<html><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"/><style>h1{font-size:10vw;margin:40vh auto;text-align:center;}</style><h1>网络未连接</h1></html>",
|
||||
"text/html", "utf-8", "");
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
webView.setWebChromeClient(new WebChromeClient() {
|
||||
|
||||
// JS的alert('')提示信息转换成安卓控件提示信息
|
||||
@Override
|
||||
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
|
||||
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
|
||||
result.confirm();
|
||||
return true;
|
||||
}
|
||||
|
||||
// HTML5.input.file转换为安卓文件选择器
|
||||
@Override
|
||||
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams fileChooserParams) {
|
||||
openFileChooserImplForAndroid5(uploadMsg);
|
||||
return true;
|
||||
}
|
||||
|
||||
// 进度条
|
||||
@Override
|
||||
public void onProgressChanged(WebView view, int newProgress) {
|
||||
super.onProgressChanged(view, newProgress);
|
||||
pgb1.setProgress(newProgress);
|
||||
if(sharedPreferences.getBoolean("switch_adBlock",true)){
|
||||
ADBlock();
|
||||
}
|
||||
if(sharedPreferences.getBoolean("switch_iframeBlock",false)) {
|
||||
if (!view.getUrl().contains("baidu.com")){
|
||||
iframeBlock();
|
||||
}
|
||||
}
|
||||
// 链接关键字屏蔽
|
||||
if(sharedPreferences.getBoolean("switch_filter",false)){
|
||||
String sf = sharedPreferences.getString("filter","");
|
||||
if(!sf.equals("")) {
|
||||
String js = "javascript:var s='"+sf+"';var sl=s.split(';');var a=document.getElementsByTagName('a');for(var i=0;i<a.length;i++){for(var j=0;j<sl.length;j++){if(a[i].textContent.indexOf(sl[j])!=-1){a[i].textContent='';}}}";
|
||||
view.loadUrl(js);
|
||||
}
|
||||
}
|
||||
// 链接关键字高亮
|
||||
if(sharedPreferences.getBoolean("switch_highlight",false)){
|
||||
String shl = sharedPreferences.getString("highlight","");
|
||||
if(!shl.equals("")) {
|
||||
String js = "javascript:var s='"+shl+"';var sl=s.split(';');var a=document.getElementsByTagName('a');for(var i=0;i<a.length;i++){for(var j=0;j<sl.length;j++){if(a[i].textContent.indexOf(sl[j])!=-1){a[i].style.color='white';a[i].style.backgroundColor='#DA3434';}}}";
|
||||
view.loadUrl(js);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取网页标题
|
||||
@Override
|
||||
public void onReceivedTitle(WebView view, String title) {
|
||||
super.onReceivedTitle(view, title);
|
||||
button_title.setText(title);
|
||||
ptitle = title;
|
||||
}
|
||||
|
||||
// 接收网站图标(favicon)
|
||||
public void onReceivedIcon(WebView view, Bitmap icon) {
|
||||
imageButton_info.setImageBitmap(icon);
|
||||
}
|
||||
|
||||
// 播放网络视频时全屏会被调用的方法
|
||||
@Override
|
||||
public void onShowCustomView(View view, CustomViewCallback callback) {
|
||||
Log.e("onShowCustomView", "onShowCustomView");
|
||||
//Toast.makeText(getApplicationContext(), "onShowCustomView", Toast.LENGTH_SHORT).show();
|
||||
customViewCallback = callback;
|
||||
// 将video放到当前视图中
|
||||
video.addView(view);
|
||||
// 设置全屏
|
||||
setFullScreen();
|
||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
|
||||
// 视频播放退出全屏会被调用的
|
||||
@Override
|
||||
public void onHideCustomView() {
|
||||
Log.e("onHideCustomView", "onHideCustomView");
|
||||
//Toast.makeText(getApplicationContext(), "onHideCustomView", Toast.LENGTH_SHORT).show();
|
||||
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
// 退出全屏
|
||||
// quitFullScreen();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
|
||||
Log.d("onConsoleMessage", consoleMessage.message() + " at " + consoleMessage.sourceId() + ":" + consoleMessage.lineNumber());
|
||||
return super.onConsoleMessage(consoleMessage);
|
||||
}
|
||||
|
||||
// 定位权限
|
||||
@Override
|
||||
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
|
||||
callback.invoke(origin, true, false);
|
||||
super.onGeolocationPermissionsShowPrompt(origin, callback);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
webView.setDownloadListener(new MyWebViewDownLoadListener());
|
||||
|
||||
webView.setOnTouchListener(new OnTouchListener() {
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
button_title.setVisibility(View.VISIBLE);
|
||||
editText1.setVisibility(View.GONE);
|
||||
webView.requestFocus();
|
||||
IMM.hideSoftInputFromWindow(editText1.getWindowToken(), 0);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -42,6 +42,15 @@
|
|||
android:background="@null"
|
||||
android:src="@android:drawable/ic_media_ff"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_page"
|
||||
android:layout_width="25dp"
|
||||
android:layout_height="25dp"
|
||||
android:layout_marginRight="2dp"
|
||||
android:background="@drawable/border"
|
||||
android:text="0"
|
||||
android:textColor="#808080"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/imageButton_info"
|
||||
android:layout_width="25dp"
|
||||
|
@ -50,6 +59,15 @@
|
|||
android:scaleType="fitCenter"
|
||||
android:src="@android:drawable/ic_menu_info_details"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:background="#ffffff"
|
||||
android:ellipsize="marquee"
|
||||
android:singleLine="true"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/EditText1"
|
||||
android:layout_width="fill_parent"
|
||||
|
@ -79,7 +97,16 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
<ProgressBar
|
||||
android:id="@+id/progressBar1"
|
||||
style="@android:style/Widget.Holo.ProgressBar.Horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_alignTop="@+id/WebView1"
|
||||
android:progressDrawable="@drawable/progressbar_color"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/webViewLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -88,15 +115,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progressBar1"
|
||||
style="@android:style/Widget.Holo.ProgressBar.Horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_alignTop="@+id/WebView1"
|
||||
android:progressDrawable="@drawable/progressbar_color"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
BIN
preview.png
BIN
preview.png
Binary file not shown.
Before Width: | Height: | Size: 539 KiB After Width: | Height: | Size: 536 KiB |
Loading…
Reference in New Issue