package com.android.chmo.ui.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.support.annotation.NonNull; import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.view.KeyEvent; import android.view.View; 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.ProgressBar; import android.widget.TextView; import com.android.chmo.R; import com.android.chmo.app.ChmoApplication; import com.android.chmo.base.BaseActivity; import com.android.chmo.http.HttpApi; import com.android.chmo.http.RequestCallback; import com.android.chmo.http.response.ModelListRes; import com.android.chmo.http.service.ModelService; import com.android.chmo.model.ModelInfo; import com.android.chmo.ui.activity.model.FansActivity; import com.android.chmo.ui.activity.model.ModelDetailActivity; import com.android.chmo.ui.dialog.SendGiftDialog; import com.android.chmo.ui.dialog.ShareDialog; import com.android.chmo.wxapi.WeChatManager; import com.google.gson.Gson; import com.tencent.mm.opensdk.modelmsg.SendMessageToWX; import com.tencent.mm.opensdk.modelmsg.WXMediaMessage; import com.tencent.mm.opensdk.modelmsg.WXWebpageObject; import com.tencent.mm.opensdk.openapi.IWXAPI; import butterknife.BindView; import butterknife.OnClick; public class WebViewActivity extends BaseActivity implements ShareDialog.OnShareListener { @BindView(R.id.webView) WebView webView; @BindView(R.id.progressbar) ProgressBar progressBar; @BindView(R.id.tv_title) TextView tvTitle; private String url; private String activitypk; private String modelpk; private ShareDialog shareDialog; private IWXAPI iwxapi; private String shareUrl; private String shareTitle; private String shareDesc; public static void start(@NonNull Context context, @NonNull String url, @NonNull String activitypk, @NonNull String modelpk) { Intent intent = new Intent(context, WebViewActivity.class); intent.putExtra("url", url); intent.putExtra("activitypk", activitypk); intent.putExtra("modelpk", modelpk); context.startActivity(intent); } @Override protected int getContentResId() { return R.layout.activity_web_view; } @Override protected int getStatusBarStyle() { return STATUS_BAR_STYLE_LIGHT_CONTENT; } @OnClick(R.id.btn_back) void back() { if (webView.canGoBack()) { webView.goBack(); } else { finish(); } } @Override public void initView() { url = getIntent().getStringExtra("url"); modelpk = getIntent().getStringExtra("modelpk"); activitypk = getIntent().getStringExtra("activitypk"); webView.addJavascriptInterface(this, "chmo");//添加js监听 这样html就能调用客户端 webView.setWebChromeClient(webChromeClient); webView.setWebViewClient(webViewClient); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } WebSettings webSettings = webView.getSettings(); webSettings.setUserAgentString(webSettings.getUserAgentString() + " chmo"); webSettings.setDomStorageEnabled(true); webSettings.setJavaScriptEnabled(true);//允许使用js webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//不使用缓存,只从网络获取数据. //支持屏幕缩放 webSettings.setSupportZoom(false); webSettings.setDisplayZoomControls(false); if (!url.contains("?")) { url += "?"; } if (!TextUtils.isEmpty(activitypk)) { url += "activitypk=" + activitypk + "&"; } if (!TextUtils.isEmpty(modelpk)) { url += "modelpk=" + modelpk + "&"; } if (ChmoApplication.isLogin()) { url += "memberpk=" + ChmoApplication.getApp().getLoginUser().getPk(); } webView.loadUrl(url); shareDialog = new ShareDialog(this); shareDialog.setOnShareListener(this); WeChatManager weChatManager = WeChatManager.getInstance(); weChatManager.init(this); iwxapi = weChatManager.getApi(); } private WebViewClient webViewClient = new WebViewClient() { @Override public void onPageFinished(WebView view, String url) {//页面加载完成 progressBar.setVisibility(View.GONE); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面开始加载 progressBar.setVisibility(View.VISIBLE); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("tel:")) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); view.reload(); return true; } return super.shouldOverrideUrlLoading(view, url); } }; private WebChromeClient webChromeClient = new WebChromeClient() { @Override public boolean onJsAlert(WebView webView, String url, String message, JsResult result) { new AlertDialog.Builder(webView.getContext()) .setMessage(message) .setPositiveButton("确定", (dialog, which) -> result.confirm()) .setCancelable(false) .show(); return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { new AlertDialog.Builder(webView.getContext()) .setMessage(message) .setPositiveButton("确定", (dialog, which) -> result.confirm()) .setNegativeButton("取消", (dialog, which) -> result.cancel()) .setCancelable(false) .show(); return true; } @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); tvTitle.setText(title); } @Override public void onProgressChanged(WebView view, int newProgress) { progressBar.setProgress(newProgress); } }; @JavascriptInterface public void modelDetail(String modelpk) { ModelService.getModelInfo(modelpk, new RequestCallback() { @Override public void onSuccess(String result) { ModelListRes res = new Gson().fromJson(result, ModelListRes.class); if (res.data != null && res.data.size() > 0) { ModelInfo model = res.data.get(0); Intent intent = new Intent(getContext(), ModelDetailActivity.class); intent.putExtra("model", model); intent.putExtra("modelPk", model.modelpk); startActivity(intent); } } @Override public void onFailure(String error) { } }); } @OnClick(R.id.btn_share) @JavascriptInterface public void share() { runOnUiThread(() -> shareDialog.show()); } @JavascriptInterface public void setShareInfo(String url, String title, String desc) { if (!TextUtils.isEmpty(url)) { if (!url.startsWith("http")) { url = HttpApi.BASE_URL + url; } shareUrl = url; } shareUrl = url; shareTitle = title; shareDesc = desc; } @JavascriptInterface public void sendGift(String modelpk, String activitypk) { runOnUiThread(() -> { if (!ChmoApplication.isLogin()) { ChmoApplication.showLoginDialog(getContext()); return; } SendGiftDialog.present(getContext(), modelpk, activitypk); }); } @JavascriptInterface public void sendVideo(String modelpk) { ModelService.getModelInfo(modelpk, new RequestCallback() { @Override public void onSuccess(String result) { ModelListRes res = new Gson().fromJson(result, ModelListRes.class); if (res.data != null && res.data.size() > 0) { ModelInfo model = res.data.get(0); Intent intent = new Intent(getContext(), ModelDetailActivity.class); intent.putExtra("model", model); intent.putExtra("modelPk", model.modelpk); intent.putExtra("sendVideo", true); startActivity(intent); } } @Override public void onFailure(String error) { } }); } @JavascriptInterface public void fansList(String modelpk) { runOnUiThread(() -> { Intent intent = new Intent(this, FansActivity.class); intent.putExtra("modelPK", modelpk); openPage(intent); }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); } @Override protected void onDestroy() { super.onDestroy(); webView.destroy(); webView = null; } @Override public void onShareWechatSession() { WXWebpageObject webpageObject = new WXWebpageObject(TextUtils.isEmpty(shareUrl) ? webView.getUrl() : shareUrl); WXMediaMessage message = new WXMediaMessage(); message.mediaObject = webpageObject; message.title = TextUtils.isEmpty(shareTitle) ? "千模通告" : shareTitle; message.description = TextUtils.isEmpty(shareDesc) ? tvTitle.getText().toString() : shareDesc; Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); message.setThumbImage(bmp); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.scene = SendMessageToWX.Req.WXSceneSession; req.message = message; iwxapi.sendReq(req); } @Override public void onShareWechatTimeline() { WXWebpageObject webpageObject = new WXWebpageObject(TextUtils.isEmpty(shareUrl) ? webView.getUrl() : shareUrl); WXMediaMessage message = new WXMediaMessage(); message.mediaObject = webpageObject; message.title = TextUtils.isEmpty(shareTitle) ? tvTitle.getText().toString() : shareTitle; message.description = TextUtils.isEmpty(shareDesc) ? tvTitle.getText().toString() : shareDesc; Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); message.setThumbImage(bmp); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.scene = SendMessageToWX.Req.WXSceneTimeline; req.message = message; iwxapi.sendReq(req); } }