功能详细的WebViewActivity

附带给网页端设置登录信息等。



package cchen.z.interview.A.webview;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Message;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.ClipboardManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.DownloadListener;
import android.webkit.GeolocationPermissions;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.PopupWindow;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.HashMap;

import cchen.z.interview.A.utils.StringUtil;
import cchen.z.interview.A.utils.Utils;
import cchen.z.interview.R;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


public class WebViewActivity extends Activity implements View.OnClickListener {
public static final String TAG = WebViewActivity.class.getSimpleName();

public static final String EXTRA_URL = "URL";
public static final String EXTRA_TITLE = "title";
public static final String EXTRA_RIGHT_ICON = "rightIcon";
public static final String RIGHT_SHARE_BUTTON_DISPLAY = "right_share_btn_display";
public static final String EXTRA_SHARE_URL = "extra_share_url";
public static final String SCREEN_ORIENTATION_MODE = "screen_orientation_mode";

public static final int SCREEN_ORIENTATION_PORTRAIT = 0;//竖屏
public static final int SCREEN_ORIENTATION_LANDSCAPE = 1;//横屏
public static final int SCREEN_ORIENTATION_SENSOR = 3;//根据手机方向判断

private ProgressBar mHorizontalProgress;//顶部进度条
private WebView mWebView;
private boolean mIsRightShareBtnDisplay = false;
private ViewGroup mToolbar;


private String url;
private String title;
boolean rightIcon = true;

private int source = 0;
public static final String SOURCE_FROM = "SOURCE";
public static final int FROM_CSL = 0x2;
private String sso_tk;
private HashMap<String, String> headers;

private FrameLayout customViewContainer;
private View mCustomView;
private WebChromeClient.CustomViewCallback customViewCallback;
private MyWebChromeClient myWebChromeClient;
private SwipeRefreshLayout layout_swipe_refresh;//下拉刷新

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);
headers = new HashMap<>();

if (getIntent() != null) {
source = getIntent().getIntExtra(SOURCE_FROM, 0);
title = getIntent().getStringExtra(EXTRA_TITLE);

setOrientation();

//拼接参数
final String token1 = FakeUserCenter.getSSO_TOKEN();
sso_tk = token1;

switch (source) {
case FROM_CSL:
url = "http://sso.xxxx/user/setUserStatus?from=mobile&next_action="
+ URLEncoder.encode("http://next.html");
headers.put("SSOTK", token1);
break;
case 0:
url = getIntent().getStringExtra(EXTRA_URL);
if (url != null) {
Uri uri = Uri.parse(url);
Uri.Builder builder = Uri.parse(url).buildUpon();

if (uri.getScheme() == null) {
builder.scheme("http");
url = builder.build().toString();
}
Uri baseUri = Uri.parse(url);
if (baseUri.getScheme() == null) {
url = baseUri.buildUpon().scheme("http").build().toString();
}
}

mIsRightShareBtnDisplay = getIntent().getBooleanExtra(RIGHT_SHARE_BUTTON_DISPLAY, true);
}
rightIcon = getIntent().getBooleanExtra(EXTRA_RIGHT_ICON, true);
initToolbar();
}
mHorizontalProgress = (ProgressBar) findViewById(R.id.progress_horizontal);

//有的url需要已登录用户的token
if (url.contains("some_url_need_login")) {
if (FakeUserCenter.isLogin()) {
url = url + "&caller=1003&ssoTk=" + FakeUserCenter.getSSO_TOKEN();
} else {
url = "";
TextView login = (TextView) findViewById(R.id.login);
login.setVisibility(View.VISIBLE);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(WebViewActivity.this, "login for user`s info", Toast.LENGTH_LONG).show();
// LoginService.addLetvLoginLayout(this, new LoginService.LetvLoginCallBack() {
// @Override
// public void success() {
// login.setVisibility(View.GONE);
// url = defultUrl + "&caller=1003&ssoTk=" + FakeUserCenter.getSSO_TOKEN();
// refresh();
// }
// });
}
});


}
}
initWebView();

layout_swipe_refresh = (SwipeRefreshLayout) findViewById(R.id.layout_swipe_refresh);
layout_swipe_refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refresh();
}
});

refresh();

//注册登录广播接收器用于回调h5传token id
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(FakeUserCenter.LOGIN_STATUS_CHANGE_ACTION);
mLoginReceiver = new LoginReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(mLoginReceiver, intentFilter);
// LocalBroadcastManager只收发本APP的广播,不用担心数据泄露或者别人伪造广播。效率更高
}

private void initWebView() {
mWebView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = mWebView.getSettings();

//设置UA
String userAgent = webSettings.getUserAgentString();
webSettings.setUserAgentString(userAgent + getApplication().getApplicationInfo().name + Utils.getAppVersionName(this));


// 设置支持JavaScript
webSettings.setJavaScriptEnabled(true);

//5.0以上支持http和https混合
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

//网页有缩放的需求才会体现出此特性,比如访问的是电脑版网页
webSettings.setSupportZoom(true);
//显示原生缩放控制
webSettings.setDisplayZoomControls(true);
webSettings.setBuiltInZoomControls(true);


// webSettings.setDatabaseEnabled(true);
// String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();

//是否支持地理位置
webSettings.setGeolocationEnabled(true);
// webSettings.setGeolocationDatabasePath(dir);

//将图片调整到适合webview的大小
webSettings.setUseWideViewPort(true);
// 缩放至屏幕的大小
webSettings.setLoadWithOverviewMode(true);


//默认也都是开
webSettings.setAllowFileAccess(true);//是否可以访问文件协议开头的资源
webSettings.setAllowContentAccess(true);//是否可以访问contentProvider协议的资源


//数据缓存分为两种:AppCache和DOM Storage(Web Storage)。
//dom storage 可以持久化存储,类似sharePreference
//如果网页端需要存储一些简单的用key/value对即可解决的数据,DOM Storage是非常完美的方案。
webSettings.setDomStorageEnabled(true);
// webSettings.setDatabasePath();已无效

//网页端的缓存。无关domStorage。
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setAppCacheEnabled(false);
if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
String cacheFolder =
"/sdcard"
// Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + "ez_webview_cache";
File cacheFolderFile = new File(cacheFolder);
if (!cacheFolderFile.exists()) {
boolean mkdirs = cacheFolderFile.mkdirs();
}
webSettings.setAppCachePath(cacheFolder);
//cache存放在data/data/包名/
}
webSettings.setAppCacheMaxSize(Long.MAX_VALUE);//Android已改为自动管理

// LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据,
// LOAD_DEFAULT:根据cache-control决定是否从网络上取数据。HTTP 协议头里的 Cache-Control,
// LOAD_CACHE_NORMAL:API level 17中已经废弃, 从API level 11开始作用同- - LOAD_DEFAULT模式,
// LOAD_NO_CACHE: 不使用缓存,只从网络获取数据,
// LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

// http协议缓存机制是指通过 HTTP 协议头里的 Cache-Control(或 Expires)和 Last-Modified(或 Etag)等字段来控制文件缓存的机制。
// Cache-Control 用于控制文件在本地缓存有效时长。最常见的,比如服务器回包:Cache-Control:max-age=600 表示文件在本地应该缓存,且有效时长是600秒(从发出请求算起)。在接下来600秒内,如果有请求这个资源,浏览器不会发出 HTTP 请求,而是直接使用本地缓存的文件。
// Last-Modified 是标识文件在服务器上的最新更新时间。下次请求时,如果文件缓存过期,浏览器通过 If-Modified-Since 字段带上这个时间,发送给服务器,由服务器比较时间戳来判断文件是否有修改。如果没有修改,服务器返回304告诉浏览器继续使用缓存;如果有修改,则返回200,同时返回最新的文件。

// Cache-Control 通常与 Last-Modified 一起使用。一个用于控制缓存有效时间,一个在缓存失效后,向服务查询是否有更新。
// Cache-Control 还有一个同功能的字段:Expires。Expires 的值一个绝对的时间点,如:Expires: Thu, 10 Nov 2015 08:45:11 GMT,表示在这个时间点之前,缓存都是有效的。
// Expires 是 HTTP1.0 标准中的字段,Cache-Control 是 HTTP1.1 标准中新加的字段,功能一样,都是控制缓存的有效时间。当这两个字段同时出现时,Cache-Control 是高优化级的。

// Etag 也是和 Last-Modified 一样,对文件进行标识的字段。不同的是,Etag 的取值是一个对文件进行标识的特征字串。
// 在向服务器查询文件是否有更新时,浏览器通过 If-None-Match 字段把特征字串发送给服务器,由服务器和文件最新特征字串进行匹配,来判断文件是否有更新。
// 没有更新回包304,有更新回包200。
// Etag 和 Last-Modified 可根据需求使用一个或两个同时使用。两个同时使用时,只要满足基中一个条件,就认为文件没有更新。


//允许跨域访问
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
webSettings.setAllowUniversalAccessFromFileURLs(true);


//5.0以上打开webView跨域携带cookie的许可
if (Build.VERSION.SDK_INT >= 21) {
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptThirdPartyCookies(mWebView, true);
}
mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
/* if (Build.VERSION.SDK_INT < 19) {
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}*/

//处理webView的回调
mWebView.setWebViewClient(webViewClient);

//处理js回调
mWebView.setWebChromeClient(myWebChromeClient = new MyWebChromeClient());

mWebView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});

//为webView隐藏的接口,可能被远程控制。
mWebView.removeJavascriptInterface("searchBoxJavaBridge_");
mWebView.removeJavascriptInterface("accessibility");
mWebView.removeJavascriptInterface("accessibilityTraversal");

mWebView.addJavascriptInterface(jsInterface, "myJsInterface");

//长按打开图片
mWebView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
WebView.HitTestResult result = ((WebView) v).getHitTestResult();
int type = result.getType();
String extra = result.getExtra();
Log.d(TAG, type + " onLongClick " + extra);

if (type == WebView.HitTestResult.UNKNOWN_TYPE)
return false;

switch (type) {
case WebView.HitTestResult.PHONE_TYPE:
break;
case WebView.HitTestResult.EMAIL_TYPE:
break;
case WebView.HitTestResult.GEO_TYPE:
break;
case WebView.HitTestResult.SRC_ANCHOR_TYPE:
break;
case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
break;
case WebView.HitTestResult.IMAGE_TYPE:
String saveImgUrl = result.getExtra();

Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(saveImgUrl));
startActivity(i);
break;
default:
break;
}
return true;
}
});

}

private void setOrientation() {
int screen_mode = getIntent().getIntExtra(SCREEN_ORIENTATION_MODE, -1);
if (screen_mode == SCREEN_ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (screen_mode == SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if (screen_mode == SCREEN_ORIENTATION_SENSOR) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

}

private void refresh() {
layout_swipe_refresh.setRefreshing(false);

if (getIntent() != null) {
switch (source) {
case FROM_CSL:
/* Log.e("---url", url);
mWebView.loadUrl(url, headers);*/
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(url, "sso_tk=" + sso_tk);
mWebView.loadUrl(url, headers);
break;
case 0:
default:
if (FakeUserCenter.isLogin()) {
// SynLeSsoTk.setCookie(this, url, SynLeSsoTk.getInstances().getCookie(FakeUserCenter.getId(), WebViewActivity.this));
}
mWebView.loadUrl(url);
break;
}
}
}

WebViewClient webViewClient = new WebViewClient() {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (FakeUserCenter.isLogin()) {
// SynLeSsoTk.setCookie(WebViewActivity.this, url, SynLeSsoTk.getInstances().getCookie(FakeUserCenter.getId(), WebViewActivity.this));
}

CookieSyncManager.createInstance(WebViewActivity.this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie(url, "sso_tk=" + sso_tk);
CookieSyncManager.getInstance().sync();
Uri uri = Uri.parse(url);
if (url.startsWith("tel:") || url.startsWith("mailto:") || url.startsWith("weixin:")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
} else if (uri.getScheme().equals("qq.launch") && uri.getHost().equals("www.qq.com")) {
if ("h5".equals(uri.getQueryParameter("from"))) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
} else {
url = uri.getQueryParameter("url");
WebViewActivity.this.url = url;
mWebView.loadUrl(url);
return true;
}
} else if (uri.getScheme().equals("qq.client")) {
return true;
} else {
//view.loadUrl(url);
WebViewActivity.this.url = url;
return super.shouldOverrideUrlLoading(view, url);
}
}

@Override
public void onFormResubmission(WebView view, Message dontResend, Message resend) {
resend.sendToTarget();
}

@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
view.loadUrl("www.baidu.com");
Toast.makeText(view.getContext(), "net_error", Toast.LENGTH_SHORT).show();
}
};

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.share:
shareUrl();
popWindow.dismiss();
break;
case R.id.copy:
if (StringUtil.isEmpty(url)) break;
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard == null) break;
clipboard.setText(url);
if (clipboard.getText().equals(url))
Toast.makeText(this, "url_has_been_copied", Toast.LENGTH_LONG).show();
popWindow.dismiss();
break;
case R.id.open_in_explore:
if (StringUtil.isEmpty(url)) break;
Uri uri = Uri.parse(url);
// uri = uri.buildUpon().scheme("http").build();

Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try {
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
popWindow.dismiss();
break;
case R.id.refresh:
refresh();
popWindow.dismiss();
break;
case android.R.id.home:
finish();
break;

}
}

private void shareUrl() {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, url);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, title);
sendIntent.setType("text/plain");
startActivity(sendIntent);
}

private class MyWebChromeClient extends WebChromeClient {
private View mVideoProgressView;

@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress >= 100) {
if (mHorizontalProgress != null) {
mHorizontalProgress.setVisibility(View.GONE);
}
} else {
if (mHorizontalProgress != null && newProgress >= 0) {

mHorizontalProgress.setVisibility(View.VISIBLE);
mHorizontalProgress.setProgress(newProgress);
}
}
}

//当网页弹出alert
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(TAG, message);
// This shows the dialog box. This can be commented out for dev
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(WebViewActivity.this);
alertBuilder.setMessage(message);
alertBuilder.setTitle("Alert");
alertBuilder.show();
result.confirm();
return true;
}


//当网页请求地理位置
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin
, true //如果不允许的话,JS请求地理位置会得到error:permission denied by user
, false);

Toast.makeText(getApplicationContext(), "onGeolocationPermissionsShowPrompt", Toast.LENGTH_LONG).show();
// super.onGeolocationPermissionsShowPrompt(origin, callback);
}

@Override
public void onReceivedTitle(WebView view, String mTitle) {
super.onReceivedTitle(view, mTitle);
if (TextUtils.isEmpty(mTitle) || mTitle.startsWith("http"))
return;//有时候网页端没有设置title会返回url
title = mTitle;
if (mToolbar != null) {
((TextView) mToolbar.findViewById(R.id.tv_action_title)).setText(mTitle);
}
}

@Override
public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) {
onShowCustomView(view, callback);
}

@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
if (mCustomView != null) {
callback.onCustomViewHidden();
return;
}
mCustomView = view;
mWebView.setVisibility(View.GONE);
customViewContainer.setVisibility(View.VISIBLE);
customViewContainer.addView(view);
customViewCallback = callback;
}

@Override
public View getVideoLoadingProgressView() {
if (mVideoProgressView == null) {
LayoutInflater inflater = LayoutInflater.from(WebViewActivity.this);
mVideoProgressView = inflater.inflate(R.layout.video_progress, null);
}
return mVideoProgressView;
}

@Override
public void onHideCustomView() {
if (mCustomView == null)
return;
mWebView.setVisibility(View.VISIBLE);
customViewContainer.setVisibility(View.GONE);
mCustomView.setVisibility(View.GONE);
customViewContainer.removeView(mCustomView);
customViewCallback.onCustomViewHidden();
mCustomView = null;
}

@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
//需要弹出多窗口的情况。需要自己处理
return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
}
}

PopupWindow popWindow;

private void initToolbar() {
mToolbar = (ViewGroup) findViewById(R.id.toolbar);

mToolbar.findViewById(R.id.img_back_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
((TextView) mToolbar.findViewById(R.id.tv_action_title)).setText(title);
if (rightIcon) {
mToolbar.findViewById(R.id.right_btn).setVisibility(View.VISIBLE);
mToolbar.findViewById(R.id.right_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popWindow = new PopupWindow(WebViewActivity.this);
View mContentView = LayoutInflater.from(WebViewActivity.this).inflate(
R.layout.webview_menu_popwindow, null);
popWindow.setContentView(mContentView);
popWindow.setTouchable(true);
mContentView.setFocusable(true);
mContentView.setFocusableInTouchMode(true);
mContentView.findViewById(R.id.share).setOnClickListener(WebViewActivity.this);
mContentView.findViewById(R.id.copy).setOnClickListener(WebViewActivity.this);
mContentView.findViewById(R.id.open_in_explore).setOnClickListener(WebViewActivity.this);
mContentView.findViewById(R.id.refresh).setOnClickListener(WebViewActivity.this);
popWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
popWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
popWindow.setFocusable(true);
if (!mIsRightShareBtnDisplay) {
mContentView.findViewById(R.id.share).setVisibility(View.GONE);
}
popWindow.showAsDropDown(mToolbar.findViewById(R.id.right_btn), 0, 25);
}
});
}
}

@Override
protected void onResume() {
super.onResume();
mWebView.onResume();
}

@Override
protected void onPause() {
super.onPause();
mWebView.onPause();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mCustomView != null) {
myWebChromeClient.onHideCustomView();
return true;
}
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
onBackPressed();
}
return true;
}
return super.onKeyDown(keyCode, event);
}

@Override
public void finish() {
super.finish();
}

@Override
public void onDestroy() {
if (mWebView != null) {
//webview调用destory时,webview仍绑定在Activity上.
// 这是由于自定义webview构建时传入了该Activity的context对象,因此需要先从父容器中移除webview,然后再销毁webview.
//还可以让webView运行在单独进程中,不用的时候直接system.exit(0)
ViewParent parent = mWebView.getParent();
if (parent != null) {
//防止内存泄露。
mWebView.clearHistory();
((ViewGroup) mWebView.getParent()).removeView(mWebView);
mWebView.loadUrl("about:blank");
mWebView.stopLoading();
mWebView.setWebChromeClient(null);
mWebView.setWebViewClient(null);
}
mWebView.removeAllViews();

try {
mWebView.destroy();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (mLoginReceiver != null) {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mLoginReceiver);
}
super.onDestroy();
}

private JsInterface jsInterface = new JsInterface();

final class JsInterface {
//有JavascriptInterface注解的才能被JS调用,防止被注入
@JavascriptInterface
public void getLoginData() {
runOnUiThread(new Runnable() {

@Override
public void run() {
if (FakeUserCenter.isLogin()) {
//调用JS的方法
mWebView.loadUrl("javascript:loginCallBack('" + FakeUserCenter.getId() + "','" + FakeUserCenter.getSSO_TOKEN() + "')");
} else {
//login
// LoginService.addLetvLoginLayout(WebViewActivity.this);
// when success
mWebView.loadUrl("javascript:loginCallBack('" + FakeUserCenter.getId() + "','" + FakeUserCenter.getSSO_TOKEN() + "')");
}

}
});

}

@JavascriptInterface
public void shareData(final String shareText, final String shareTitle, final String shareContentURL, final String shareIconUrl) {

runOnUiThread(new Runnable() {

@Override
public void run() {
try {
String cUrl = mWebView.getUrl();
if (TextUtils.isEmpty(cUrl)) {
return;
}
Uri cUri = Uri.parse(cUrl);
/*String debug = cUri.getQueryParameter("debug");*/
String whiteKey = cUri.getHost();
if (TextUtils.isEmpty(shareText) || TextUtils.isEmpty(shareTitle) || TextUtils.isEmpty(shareContentURL)) {
mWebView.loadUrl("javascript:shareCallBack('0')");
return;
} else {
mWebView.loadUrl("javascript:shareCallBack('1')");
shareUrl();
}
} catch (Exception e) {
return;
}


}
});

}
}

class LoginReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
String action = intent.getAction();
if (action != null && FakeUserCenter.LOGIN_STATUS_CHANGE_ACTION.equals(action)) {
onLoginStatusChanged();
}
}

}
}
private LoginReceiver mLoginReceiver;

private void onLoginStatusChanged() {
if (FakeUserCenter.isLogin()) {
mWebView.loadUrl("javascript:loginCallBack('" + FakeUserCenter.getId() + "','" + FakeUserCenter.getSSO_TOKEN() + "')");
}
}

private void getWebData(final String requestUrl) {
new Thread() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(requestUrl)
.build();
try {
Response response = okHttpClient.newCall(request).execute();
final String data = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!TextUtils.isEmpty(data)) {//页面销毁之后不做处理
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && !isDestroyed()) {
// mWebView.loadData(data, "text/html; charset=UTF-8", null);
mWebView.loadDataWithBaseURL(null, data, "text/html", "UTF-8", null);
}
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值