WebViewActivity.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. package com.android.chmo.ui.activity;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.graphics.Bitmap;
  6. import android.graphics.BitmapFactory;
  7. import android.net.Uri;
  8. import android.os.Build;
  9. import android.support.annotation.NonNull;
  10. import android.support.v7.app.AlertDialog;
  11. import android.text.TextUtils;
  12. import android.view.KeyEvent;
  13. import android.view.View;
  14. import android.webkit.JavascriptInterface;
  15. import android.webkit.JsResult;
  16. import android.webkit.WebChromeClient;
  17. import android.webkit.WebSettings;
  18. import android.webkit.WebView;
  19. import android.webkit.WebViewClient;
  20. import android.widget.ProgressBar;
  21. import android.widget.TextView;
  22. import com.android.chmo.R;
  23. import com.android.chmo.app.ChmoApplication;
  24. import com.android.chmo.base.BaseActivity;
  25. import com.android.chmo.http.HttpApi;
  26. import com.android.chmo.http.RequestCallback;
  27. import com.android.chmo.http.response.ModelListRes;
  28. import com.android.chmo.http.service.ModelService;
  29. import com.android.chmo.model.ModelInfo;
  30. import com.android.chmo.ui.activity.model.FansActivity;
  31. import com.android.chmo.ui.activity.model.ModelDetailActivity;
  32. import com.android.chmo.ui.dialog.SendGiftDialog;
  33. import com.android.chmo.ui.dialog.ShareDialog;
  34. import com.android.chmo.wxapi.WeChatManager;
  35. import com.google.gson.Gson;
  36. import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
  37. import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
  38. import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
  39. import com.tencent.mm.opensdk.openapi.IWXAPI;
  40. import butterknife.BindView;
  41. import butterknife.OnClick;
  42. public class WebViewActivity extends BaseActivity implements ShareDialog.OnShareListener {
  43. @BindView(R.id.webView)
  44. WebView webView;
  45. @BindView(R.id.progressbar)
  46. ProgressBar progressBar;
  47. @BindView(R.id.tv_title)
  48. TextView tvTitle;
  49. private String url;
  50. private String activitypk;
  51. private String modelpk;
  52. private ShareDialog shareDialog;
  53. private IWXAPI iwxapi;
  54. private String shareUrl;
  55. private String shareTitle;
  56. private String shareDesc;
  57. public static void start(@NonNull Context context, @NonNull String url, @NonNull String activitypk, @NonNull String modelpk) {
  58. Intent intent = new Intent(context, WebViewActivity.class);
  59. intent.putExtra("url", url);
  60. intent.putExtra("activitypk", activitypk);
  61. intent.putExtra("modelpk", modelpk);
  62. context.startActivity(intent);
  63. }
  64. @Override
  65. protected int getContentResId() {
  66. return R.layout.activity_web_view;
  67. }
  68. @Override
  69. protected int getStatusBarStyle() {
  70. return STATUS_BAR_STYLE_LIGHT_CONTENT;
  71. }
  72. @OnClick(R.id.btn_back)
  73. void back() {
  74. if (webView.canGoBack()) {
  75. webView.goBack();
  76. } else {
  77. finish();
  78. }
  79. }
  80. @Override
  81. public void initView() {
  82. url = getIntent().getStringExtra("url");
  83. modelpk = getIntent().getStringExtra("modelpk");
  84. activitypk = getIntent().getStringExtra("activitypk");
  85. webView.addJavascriptInterface(this, "chmo");//添加js监听 这样html就能调用客户端
  86. webView.setWebChromeClient(webChromeClient);
  87. webView.setWebViewClient(webViewClient);
  88. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  89. WebView.setWebContentsDebuggingEnabled(true);
  90. }
  91. WebSettings webSettings = webView.getSettings();
  92. webSettings.setUserAgentString(webSettings.getUserAgentString() + " chmo");
  93. webSettings.setDomStorageEnabled(true);
  94. webSettings.setJavaScriptEnabled(true);//允许使用js
  95. webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//不使用缓存,只从网络获取数据.
  96. //支持屏幕缩放
  97. webSettings.setSupportZoom(false);
  98. webSettings.setDisplayZoomControls(false);
  99. if (!url.contains("?")) {
  100. url += "?";
  101. }
  102. if (!TextUtils.isEmpty(activitypk)) {
  103. url += "activitypk=" + activitypk + "&";
  104. }
  105. if (!TextUtils.isEmpty(modelpk)) {
  106. url += "modelpk=" + modelpk + "&";
  107. }
  108. if (ChmoApplication.isLogin()) {
  109. url += "memberpk=" + ChmoApplication.getApp().getLoginUser().getPk();
  110. }
  111. webView.loadUrl(url);
  112. shareDialog = new ShareDialog(this);
  113. shareDialog.setOnShareListener(this);
  114. WeChatManager weChatManager = WeChatManager.getInstance();
  115. weChatManager.init(this);
  116. iwxapi = weChatManager.getApi();
  117. }
  118. private WebViewClient webViewClient = new WebViewClient() {
  119. @Override
  120. public void onPageFinished(WebView view, String url) {//页面加载完成
  121. progressBar.setVisibility(View.GONE);
  122. }
  123. @Override
  124. public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面开始加载
  125. progressBar.setVisibility(View.VISIBLE);
  126. }
  127. @Override
  128. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  129. if (url.startsWith("tel:")) {
  130. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
  131. startActivity(intent);
  132. view.reload();
  133. return true;
  134. }
  135. return super.shouldOverrideUrlLoading(view, url);
  136. }
  137. };
  138. private WebChromeClient webChromeClient = new WebChromeClient() {
  139. @Override
  140. public boolean onJsAlert(WebView webView, String url, String message, JsResult result) {
  141. new AlertDialog.Builder(webView.getContext())
  142. .setMessage(message)
  143. .setPositiveButton("确定", (dialog, which) -> result.confirm())
  144. .setCancelable(false)
  145. .show();
  146. return true;
  147. }
  148. @Override
  149. public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
  150. new AlertDialog.Builder(webView.getContext())
  151. .setMessage(message)
  152. .setPositiveButton("确定", (dialog, which) -> result.confirm())
  153. .setNegativeButton("取消", (dialog, which) -> result.cancel())
  154. .setCancelable(false)
  155. .show();
  156. return true;
  157. }
  158. @Override
  159. public void onReceivedTitle(WebView view, String title) {
  160. super.onReceivedTitle(view, title);
  161. tvTitle.setText(title);
  162. }
  163. @Override
  164. public void onProgressChanged(WebView view, int newProgress) {
  165. progressBar.setProgress(newProgress);
  166. }
  167. };
  168. @JavascriptInterface
  169. public void modelDetail(String modelpk) {
  170. ModelService.getModelInfo(modelpk, new RequestCallback() {
  171. @Override
  172. public void onSuccess(String result) {
  173. ModelListRes res = new Gson().fromJson(result, ModelListRes.class);
  174. if (res.data != null && res.data.size() > 0) {
  175. ModelInfo model = res.data.get(0);
  176. Intent intent = new Intent(getContext(), ModelDetailActivity.class);
  177. intent.putExtra("model", model);
  178. intent.putExtra("modelPk", model.modelpk);
  179. startActivity(intent);
  180. }
  181. }
  182. @Override
  183. public void onFailure(String error) {
  184. }
  185. });
  186. }
  187. @OnClick(R.id.btn_share)
  188. @JavascriptInterface
  189. public void share() {
  190. runOnUiThread(() -> shareDialog.show());
  191. }
  192. @JavascriptInterface
  193. public void setShareInfo(String url, String title, String desc) {
  194. if (!TextUtils.isEmpty(url)) {
  195. if (!url.startsWith("http")) {
  196. url = HttpApi.BASE_URL + url;
  197. }
  198. shareUrl = url;
  199. }
  200. shareUrl = url;
  201. shareTitle = title;
  202. shareDesc = desc;
  203. }
  204. @JavascriptInterface
  205. public void sendGift(String modelpk, String activitypk) {
  206. runOnUiThread(() -> {
  207. if (!ChmoApplication.isLogin()) {
  208. ChmoApplication.showLoginDialog(getContext());
  209. return;
  210. }
  211. SendGiftDialog.present(getContext(), modelpk, activitypk);
  212. });
  213. }
  214. @JavascriptInterface
  215. public void sendVideo(String modelpk) {
  216. ModelService.getModelInfo(modelpk, new RequestCallback() {
  217. @Override
  218. public void onSuccess(String result) {
  219. ModelListRes res = new Gson().fromJson(result, ModelListRes.class);
  220. if (res.data != null && res.data.size() > 0) {
  221. ModelInfo model = res.data.get(0);
  222. Intent intent = new Intent(getContext(), ModelDetailActivity.class);
  223. intent.putExtra("model", model);
  224. intent.putExtra("modelPk", model.modelpk);
  225. intent.putExtra("sendVideo", true);
  226. startActivity(intent);
  227. }
  228. }
  229. @Override
  230. public void onFailure(String error) {
  231. }
  232. });
  233. }
  234. @JavascriptInterface
  235. public void fansList(String modelpk) {
  236. runOnUiThread(() -> {
  237. Intent intent = new Intent(this, FansActivity.class);
  238. intent.putExtra("modelPK", modelpk);
  239. openPage(intent);
  240. });
  241. }
  242. @Override
  243. public boolean onKeyDown(int keyCode, KeyEvent event) {
  244. if (webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK) {
  245. webView.goBack();
  246. return true;
  247. }
  248. return super.onKeyDown(keyCode, event);
  249. }
  250. @Override
  251. protected void onDestroy() {
  252. super.onDestroy();
  253. webView.destroy();
  254. webView = null;
  255. }
  256. @Override
  257. public void onShareWechatSession() {
  258. WXWebpageObject webpageObject = new WXWebpageObject(TextUtils.isEmpty(shareUrl) ? webView.getUrl() : shareUrl);
  259. WXMediaMessage message = new WXMediaMessage();
  260. message.mediaObject = webpageObject;
  261. message.title = TextUtils.isEmpty(shareTitle) ? "千模通告" : shareTitle;
  262. message.description = TextUtils.isEmpty(shareDesc) ? tvTitle.getText().toString() : shareDesc;
  263. Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
  264. message.setThumbImage(bmp);
  265. SendMessageToWX.Req req = new SendMessageToWX.Req();
  266. req.scene = SendMessageToWX.Req.WXSceneSession;
  267. req.message = message;
  268. iwxapi.sendReq(req);
  269. }
  270. @Override
  271. public void onShareWechatTimeline() {
  272. WXWebpageObject webpageObject = new WXWebpageObject(TextUtils.isEmpty(shareUrl) ? webView.getUrl() : shareUrl);
  273. WXMediaMessage message = new WXMediaMessage();
  274. message.mediaObject = webpageObject;
  275. message.title = TextUtils.isEmpty(shareTitle) ? tvTitle.getText().toString() : shareTitle;
  276. message.description = TextUtils.isEmpty(shareDesc) ? tvTitle.getText().toString() : shareDesc;
  277. Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
  278. message.setThumbImage(bmp);
  279. SendMessageToWX.Req req = new SendMessageToWX.Req();
  280. req.scene = SendMessageToWX.Req.WXSceneTimeline;
  281. req.message = message;
  282. iwxapi.sendReq(req);
  283. }
  284. }