diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6109eb052..756760194 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -686,6 +686,9 @@
html js 与webview 交互接口
+ * Created by ${user} on 2017/11/6. + */ +public class SimpleJSInterface { + private static final String TAG = SimpleJSInterface.class.getSimpleName(); + private final Context context; + + public SimpleJSInterface(Context context) { + this.context = context; + } + + /** + * 获取设备ID + * + * @return 设备id + */ + @JavascriptInterface + public String getDeviceId() { + return ""; + } + + /** + * 获取uid + * + * @return uid + */ + @JavascriptInterface + public String getUid() { + return ""; + } + + @JavascriptInterface + public void initNav(String json) { + Logger.e("initNav: " + json); + } + + /** + * 关闭浏览器 + */ + @JavascriptInterface + public void closeWebView() { + if (context instanceof Activity) { + ((Activity) context).finish(); + } + } + + /** + * 获取用户ticket + * + * @return + */ + @JavascriptInterface + public String getTicket() { + return ""; + } + + + /** + * 获取应用版本号 + */ + @JavascriptInterface + public String getAppVersion() { + return VersionUtil.getLocalName(context); + } + + /** + * 获取渠道 + * + * @return 渠道名称 + */ + @JavascriptInterface + public String getChannel() { + String channel = ""; + try { + ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); + channel = appInfo.metaData.getString("CHANNEL"); + } catch (Exception e) { + e.printStackTrace(); + } + if (TextUtils.isEmpty(channel)) { + channel = "official"; + } + return channel; + } + + + /** + * 获取 deviceInfo + * + * @return + */ + @JavascriptInterface + public String getDeviceInfo() { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("os", "android"); + jsonObject.put("app", XChatConstants.APP_MARK); + jsonObject.put("appVersion", VersionUtil.getLocalName(context)); + jsonObject.put("appVersionCode", String.valueOf(AppUtils.getVersionCode(context))); + jsonObject.put("channel", getChannel()); + Log.e(TAG, "getDeviceInfo: " + jsonObject); + return jsonObject.toJSONString(); + } + +} diff --git a/app/src/main/java/com/yizhuan/erban/ui/webview/SimpleWebViewActivity.java b/app/src/main/java/com/yizhuan/erban/ui/webview/SimpleWebViewActivity.java new file mode 100644 index 000000000..d5be70047 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/webview/SimpleWebViewActivity.java @@ -0,0 +1,226 @@ +package com.yizhuan.erban.ui.webview; + +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.net.http.SslError; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.text.TextUtils; +import android.view.View; +import android.webkit.SslErrorHandler; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.LayoutRes; +import androidx.appcompat.app.AppCompatActivity; + +import com.netease.nim.uikit.StatusBarUtil; +import com.orhanobut.logger.Logger; +import com.yizhuan.erban.R; +import com.yizhuan.erban.utils.WebViewUtils; + +import java.lang.ref.WeakReference; + + +/** + * 最简单的H5页面,用于隐私协议弹窗,不继承BaseActivity + */ +public class SimpleWebViewActivity extends AppCompatActivity { + + protected FrameLayout layoutTitleBar; + protected WebView webView; + private ProgressBar mProgressBar; + private WebChromeClient wvcc; + private ImageView mIvBack; + private ImageView mIvClose; + private TextView mTitle; + private String url; + + private int mProgress; + + private Handler mHandler = new Handler(); + + private ProgressRunnable mProgressRunnable = new ProgressRunnable(this); + + public static void start(Context context, String url) { + Intent intent = new Intent(context, SimpleWebViewActivity.class); + intent.putExtra("url", url); + context.startActivity(intent); + } + + @SuppressLint("CheckResult") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getLayoutId()); + Intent intent = getIntent(); + url = intent.getStringExtra("url"); + StatusBarUtil.transparencyBar(this); + initView(); + initData(); + setListener(); + showWebView(url); + } + + @LayoutRes + protected int getLayoutId() { + return R.layout.activity_simple_web_view; + } + + private void setListener() { + mIvBack.setOnClickListener(v -> { + if (webView.canGoBack()) { + webView.goBack(); + } else { + finish(); + } + }); + + mIvClose.setOnClickListener(v -> { + finish(); + }); + } + + @SuppressLint("SetJavaScriptEnabled") + private void initData() { + mHandler.post(mProgressRunnable); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setUseWideViewPort(true); + webView.getSettings().setLoadWithOverviewMode(true); + // 设置 WebView 可以在 HTTPS 通道上加载 HTTP 资源,Android 4.4 后的暗坑 + // 因为 Android 4.4 后默认不允许在 HTTPS 通道上加载 HTTP 资源 + webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); + webView.getSettings().setTextZoom(100); + SimpleJSInterface jsInterface = new SimpleJSInterface(this); + webView.addJavascriptInterface(jsInterface, "androidJsObj"); + webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); + webView.setWebViewClient(new WebViewClient() { + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + + if (!(url.startsWith("http") || url.startsWith("https"))) { + return true; + } + + view.loadUrl(url); + return true; + } + + @Override + public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { +// super.onReceivedSslError(view, handler, error); //一定要去掉 + // handler.cancel();// Android默认的处理方式 + handler.proceed();// 接受所有网站的证书 + // handleMessage(Message msg);// 进行其他处理 + } + + @Override + public void onPageFinished(WebView view, String url) { + Logger.e("onPageFinished--------" + url); + mProgressBar.setProgress(100); + mProgressBar.setVisibility(View.GONE); + super.onPageFinished(view, url); + } + }); + //获取webviewtitle作为titlebar的title + wvcc = new WebChromeClient() { + + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + mTitle.setText(title + ""); + } + + // For Android >= 4.1 + public void openFileChooser(ValueCallback