From 43e0531396d25ed5dfd7ba6404354cd66956ba8d Mon Sep 17 00:00:00 2001 From: itgaojian Date: Mon, 24 Jul 2023 10:25:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=B3=E5=BE=AE=E4=BF=A1=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E5=85=B3=E6=B3=A8=E5=85=AC=E4=BC=97=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 3 +- build.gradle | 3 + cm_utils/src/main/AndroidManifest.xml | 14 +- cm_utils/src/main/assets/html/qrcode.html | 38 +++ .../cm_utils/constant/PathConfig.java | 3 + .../cm_utils/core/beans/AccessToken.java | 23 ++ .../core/beans/PostWeChatTicketBean.java | 71 ++++++ .../cm_utils/core/beans/TicketBean.java | 32 +++ .../core/retrofit_net/BaseUrlApi.java | 11 +- .../core/retrofit_net/api/BaseApiService.java | 25 ++ .../conver/BaseUrlInterceptor.java | 2 + .../core/widget/base/CommonWebActivity.java | 217 ++++++++++++++++++ .../main/res/layout/activity_common_web.xml | 13 ++ .../cultural/fragment/HomeFragment.java | 16 +- 14 files changed, 456 insertions(+), 15 deletions(-) mode change 100755 => 100644 .idea/misc.xml create mode 100644 cm_utils/src/main/assets/html/qrcode.html create mode 100644 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/AccessToken.java create mode 100644 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/PostWeChatTicketBean.java create mode 100644 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/TicketBean.java create mode 100644 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/CommonWebActivity.java create mode 100644 cm_utils/src/main/res/layout/activity_common_web.xml diff --git a/.idea/misc.xml b/.idea/misc.xml old mode 100755 new mode 100644 index 37f7bbf..e09e254 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - @@ -34,7 +33,7 @@ - + diff --git a/build.gradle b/build.gradle index f223a5f..3044232 100755 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,9 @@ buildscript { google() jcenter() mavenCentral() + maven { + url "https://jitpack.io" + } } dependencies { classpath 'com.android.tools.build:gradle:7.0.2' diff --git a/cm_utils/src/main/AndroidManifest.xml b/cm_utils/src/main/AndroidManifest.xml index dcebb4c..20fa43a 100755 --- a/cm_utils/src/main/AndroidManifest.xml +++ b/cm_utils/src/main/AndroidManifest.xml @@ -10,14 +10,19 @@ + + - + android:value="2.4" /> - + android:value="true" /> @@ -38,6 +43,7 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> + diff --git a/cm_utils/src/main/assets/html/qrcode.html b/cm_utils/src/main/assets/html/qrcode.html new file mode 100644 index 0000000..98e9aae --- /dev/null +++ b/cm_utils/src/main/assets/html/qrcode.html @@ -0,0 +1,38 @@ + + + + + 公众号 + + +
+ +
+ + + \ No newline at end of file diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/constant/PathConfig.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/constant/PathConfig.java index dba547c..70a63eb 100755 --- a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/constant/PathConfig.java +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/constant/PathConfig.java @@ -30,6 +30,9 @@ public class PathConfig { public static final String MODULE_VISITOR = "visitor"; public static final String MODULE_PATROL = "patrol"; public static final String SECRET = "CMXX_TOKEN_INFOS";//秘钥 + public static final String WECHAT_LINK = "weixin://dl/business/?t="; + public static final String WECHAT_APPID="wx3267db0076f8b522"; + public static final String WECHAT_SECERT="3d4dcd2a2c2d131f42ed986fa2d5a903"; public static final String PROJECT_NAME = "locationReal";//TODO ===项目名称== public static final String ACTION_SYSTEM_MESSAGE = "com.sucstepsoft.hs.message"; public static final String ACTION_LOCATION_MESSAGE = "com.sucstepsoft.realtimelocation.MESSAGE_RECEIVED_ACTION"; diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/AccessToken.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/AccessToken.java new file mode 100644 index 0000000..8f7016d --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/AccessToken.java @@ -0,0 +1,23 @@ +package com.sucstepsoft.cm_utils.core.beans; + +public class AccessToken { + + private String access_token; + private int expires_in; + + public String getAccess_token() { + return access_token; + } + + public void setAccess_token(String access_token) { + this.access_token = access_token; + } + + public int getExpires_in() { + return expires_in; + } + + public void setExpires_in(int expires_in) { + this.expires_in = expires_in; + } +} diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/PostWeChatTicketBean.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/PostWeChatTicketBean.java new file mode 100644 index 0000000..3bc1c00 --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/PostWeChatTicketBean.java @@ -0,0 +1,71 @@ +package com.sucstepsoft.cm_utils.core.beans; + +public class PostWeChatTicketBean { + + private JumpWxaBean jump_wxa; + private boolean is_expire; + private int expire_type; + private int expire_interval; + + public JumpWxaBean getJump_wxa() { + return jump_wxa; + } + + public void setJump_wxa(JumpWxaBean jump_wxa) { + this.jump_wxa = jump_wxa; + } + + public boolean isIs_expire() { + return is_expire; + } + + public void setIs_expire(boolean is_expire) { + this.is_expire = is_expire; + } + + public int getExpire_type() { + return expire_type; + } + + public void setExpire_type(int expire_type) { + this.expire_type = expire_type; + } + + public int getExpire_interval() { + return expire_interval; + } + + public void setExpire_interval(int expire_interval) { + this.expire_interval = expire_interval; + } + + public static class JumpWxaBean { + private String path; + private String query; + private String env_version; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public String getEnv_version() { + return env_version; + } + + public void setEnv_version(String env_version) { + this.env_version = env_version; + } + } +} diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/TicketBean.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/TicketBean.java new file mode 100644 index 0000000..a3a6ddd --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/beans/TicketBean.java @@ -0,0 +1,32 @@ +package com.sucstepsoft.cm_utils.core.beans; + +public class TicketBean { + + private int errcode; + private String errmsg; + private String openlink; + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public String getOpenlink() { + return openlink; + } + + public void setOpenlink(String openlink) { + this.openlink = openlink; + } +} diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/BaseUrlApi.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/BaseUrlApi.java index 3b7e68b..38a65cf 100755 --- a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/BaseUrlApi.java +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/BaseUrlApi.java @@ -1,7 +1,5 @@ package com.sucstepsoft.cm_utils.core.retrofit_net; -import com.sucstepsoft.cm_utils.constant.PathConfig; - /** * 作者 : Adam on 2018/12/5. * 邮箱 : itgaojian@163.com @@ -9,13 +7,13 @@ import com.sucstepsoft.cm_utils.constant.PathConfig; */ public class BaseUrlApi { -// public static final String IP_URL = "http://v3.xzszwhy.cn/";/* 测试IP */ + // public static final String IP_URL = "http://v3.xzszwhy.cn/";/* 测试IP */ public static final String IP_URL = "https://www.xzszwhy.cn/";/* 测试IP */ // public static final String IP_URL = "http://192.168.0.120:8081/";/* 测试IP */ - // public static final String BASE_SYSTEM_IP = "http://192.168.0.120:8081/xzszwhy/";/*测试IP*/ + public static final String BASE_SYSTEM_IP = "http://192.168.0.120:8081/xzszwhy/";/*测试IP*/ // public static final String BASE_SYSTEM_IP = "http://v3.xzszwhy.cn/xzszwhy/";/*正式IP*/ - public static final String BASE_SYSTEM_IP = "https://www.xzszwhy.cn/xzszwhy/";/*正式IP*/ +// public static final String BASE_SYSTEM_IP = "https://www.xzszwhy.cn/xzszwhy/";/*正式IP*/ public static final String PROJECT_NAME = "app/"; public static final String BASE_URL = BASE_SYSTEM_IP; @@ -88,5 +86,6 @@ public class BaseUrlApi { public static final String BASE_SOCIAL_IMG_URL = BASE_CULTURAL_SHARE + "route/file/download/true/"; public static final String APK_DOWNLOAD_URL = "downloadUrl"; public static final String UPDATE_URL = "version.json"; - + public static final String WECHAT_OPENLINK = "https://api.weixin.qq.com/wxa/generatescheme?access_token="; + public static final String WECHAT_ACCESSTOKEN = "https://api.weixin.qq.com/cgi-bin/token"; } diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/api/BaseApiService.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/api/BaseApiService.java index 0b0d887..c76cf86 100755 --- a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/api/BaseApiService.java +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/api/BaseApiService.java @@ -2,10 +2,12 @@ package com.sucstepsoft.cm_utils.core.retrofit_net.api; import com.google.gson.JsonObject; +import com.sucstepsoft.cm_utils.core.beans.AccessToken; import com.sucstepsoft.cm_utils.core.beans.AreaBean; import com.sucstepsoft.cm_utils.core.beans.BaseDictionaryBean; import com.sucstepsoft.cm_utils.core.beans.BaseSuccessBean; import com.sucstepsoft.cm_utils.core.beans.DictionaryBean; +import com.sucstepsoft.cm_utils.core.beans.TicketBean; import com.sucstepsoft.cm_utils.core.beans.UploadBean; import com.sucstepsoft.cm_utils.core.beans.UserInfoFieldBean; import com.sucstepsoft.cm_utils.core.beans.UserLoginBean; @@ -324,4 +326,27 @@ public interface BaseApiService { @Headers({"base_url_name:bigdata", "Content-Type:application/json", "Accept:application/json"}) @GET("app/contentcensusrelease/log") Observable bigDataRead(@Query("requestUrl") String id); + + /** + * 获取accesstoken + * + * @param url + * @param type + * @param appid + * @param secret + * @return + */ + @Headers({"Content-Type:application/json", "Accept:application/json"}) + @GET + Observable getWechatAccessToken(@Url String url, @Query("grant_type") String type, @Query("appid") String appid, @Query("secret") String secret); + + /** + * 获取ticket + * + * @param url + * @return + */ + @Headers({"Content-Type:application/json", "Accept:application/json"}) + @POST + Observable getWechatOpenLink(@Url String url, @Body RequestBody body); } diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/conver/BaseUrlInterceptor.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/conver/BaseUrlInterceptor.java index c87843b..5109059 100755 --- a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/conver/BaseUrlInterceptor.java +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/retrofit_net/conver/BaseUrlInterceptor.java @@ -2,6 +2,7 @@ package com.sucstepsoft.cm_utils.core.retrofit_net.conver; import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; +import com.sucstepsoft.cm_utils.utils.LogUtils; import java.io.IOException; import java.util.List; @@ -60,6 +61,7 @@ public class BaseUrlInterceptor implements Interceptor { .build(); return chain.proceed(builder.url(newFullUrl).build()); } else { + LogUtils.e(request.url().toString()); return chain.proceed(request); } } diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/CommonWebActivity.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/CommonWebActivity.java new file mode 100644 index 0000000..18e5e5c --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/CommonWebActivity.java @@ -0,0 +1,217 @@ +package com.sucstepsoft.cm_utils.core.widget.base; + +import android.content.Intent; +import android.net.Uri; +import android.net.http.SslError; +import android.os.Build; +import android.text.TextUtils; +import android.webkit.SslErrorHandler; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.google.gson.Gson; +import com.sucstepsoft.cm_utils.R; +import com.sucstepsoft.cm_utils.constant.PathConfig; +import com.sucstepsoft.cm_utils.core.beans.AccessToken; +import com.sucstepsoft.cm_utils.core.beans.PostWeChatTicketBean; +import com.sucstepsoft.cm_utils.core.beans.TicketBean; +import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; +import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; +import com.sucstepsoft.cm_utils.core.retrofit_net.api.BaseApiService; +import com.sucstepsoft.cm_utils.utils.ExceptionHandler; +import com.sucstepsoft.cm_utils.utils.LogUtils; + +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.schedulers.Schedulers; +import okhttp3.MediaType; +import okhttp3.RequestBody; + +public class CommonWebActivity extends BaseActivity { + + private WebView mWvWeb; + + + @Override + protected int setLayoutId() { + return R.layout.activity_common_web; + } + + @Override + public void initData() { + mTvBaseTitle.setText("公众号"); + this.mWvWeb = findViewById(R.id.wv_web); + WebSettings settings = this.mWvWeb.getSettings(); + settings.setJavaScriptEnabled(true); + settings.setDomStorageEnabled(true); + settings.setJavaScriptCanOpenWindowsAutomatically(true); + settings.setAllowFileAccess(true); + settings.setSupportMultipleWindows(true); + settings.setUseWideViewPort(true); + settings.setLoadWithOverviewMode(true); + settings.setSupportZoom(false); + settings.setBuiltInZoomControls(true); + settings.setDisplayZoomControls(false); + settings.setCacheMode(WebSettings.LOAD_NO_CACHE); + if (Build.VERSION.SDK_INT >= 21) { + settings.setMixedContentMode(0); + } + if (Build.VERSION.SDK_INT >= 17) { + settings.setMediaPlaybackRequiresUserGesture(false); + } + this.mWvWeb.setWebViewClient(new WebViewClient() { + public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { + sslErrorHandler.proceed(); + } + + public void onPageFinished(WebView webView, String str) { + super.onPageFinished(webView, str); + LogUtils.e(webView.getUrl() + "===" + str); + } + + public boolean shouldOverrideUrlLoading(WebView webView, String str) { + webView.loadUrl(str); + return true; + } + + public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, + WebResourceError webResourceError) { + super.onReceivedError(webView, webResourceRequest, webResourceError); + if (Build.VERSION.SDK_INT >= 23) { + LogUtils.e(webResourceError.getErrorCode() + webResourceError.getDescription().toString()); + } + } + + public void onReceivedError(WebView webView, int i, String str, String str2) { + super.onReceivedError(webView, i, str, str2); + LogUtils.e(i); + } + + public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) { + if (Build.VERSION.SDK_INT < 21) { + return false; + } + webView.loadUrl(webResourceRequest.getUrl().toString()); + return true; + } + }); + + getAccessToken(); + } + + /** + * 获取微信小程序accessToken + */ + private void getAccessToken() { + RetrofitManager.getInstance() + .create(BaseApiService.class) + .getWechatAccessToken(BaseUrlApi.WECHAT_ACCESSTOKEN, + "client_credential", + PathConfig.WECHAT_APPID, + PathConfig.WECHAT_SECERT) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(AccessToken areaBean) { + if (!TextUtils.isEmpty(areaBean.getAccess_token())) { + getOpenLink(areaBean.getAccess_token()); + } else { + refreshView(STATE_LOAD_ERROR); + } + } + + @Override + public void onError(Throwable e) { + refreshView(STATE_LOAD_ERROR); + ExceptionHandler.handleException(e); + } + + @Override + public void onComplete() { + + } + }); + } + + /** + * 获取微信小程序ticket + * + * @param token + */ + private void getOpenLink(String token) { + LogUtils.e(token); + RequestBody body = buildRequestBody(); + RetrofitManager.getInstance() + .create(BaseApiService.class) + .getWechatOpenLink(BaseUrlApi.WECHAT_OPENLINK + token, + body) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(TicketBean b) { + LogUtils.e(b.getErrcode()); + if (b.getErrcode() == 0) { + refreshView(STATE_LOAD_SUCCESS); + startWeChat(b.getOpenlink()); + } else { + refreshView(STATE_LOAD_ERROR); + } + } + + @Override + public void onError(Throwable e) { + ExceptionHandler.handleException(e); + refreshView(STATE_LOAD_ERROR); + } + + @Override + public void onComplete() { + + } + }); + } + + private void startWeChat(String openlink) { + LogUtils.e(openlink); + try { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(openlink)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private RequestBody buildRequestBody() { + PostWeChatTicketBean bean = new PostWeChatTicketBean(); + PostWeChatTicketBean.JumpWxaBean subBean = new PostWeChatTicketBean.JumpWxaBean(); + subBean.setEnv_version("release");//默认 release 正式版 trial 体验版 develop 开发版 +// subBean.setPath("/pages/commonQrCode/commonQrCode"); + subBean.setPath("/pages/heritage/heritage"); + subBean.setQuery(""); + bean.setJump_wxa(subBean); + bean.setIs_expire(true); + bean.setExpire_type(1); + bean.setExpire_interval(1); + Gson gson = new Gson(); + String obj = gson.toJson(bean); + RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), obj); + return body; + } +} \ No newline at end of file diff --git a/cm_utils/src/main/res/layout/activity_common_web.xml b/cm_utils/src/main/res/layout/activity_common_web.xml new file mode 100644 index 0000000..a21fc90 --- /dev/null +++ b/cm_utils/src/main/res/layout/activity_common_web.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java index c10be54..a380781 100755 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java @@ -1,7 +1,9 @@ package com.tengshisoft.mudulemain.cultural.fragment; import android.content.Context; +import android.content.Intent; import android.graphics.Color; +import android.net.Uri; import android.text.TextUtils; import android.view.Gravity; import android.view.View; @@ -27,6 +29,7 @@ import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; import com.sucstepsoft.cm_utils.core.widget.base.BannerImageTextAdapter; import com.sucstepsoft.cm_utils.core.widget.base.BaseFragment; import com.sucstepsoft.cm_utils.core.widget.base.BaseRecyclerAdapter; +import com.sucstepsoft.cm_utils.core.widget.base.CommonWebActivity; import com.sucstepsoft.cm_utils.core.widget.views.CustomStateView; import com.sucstepsoft.cm_utils.core.widget.views.ItemSplitDivider; import com.sucstepsoft.cm_utils.core.widget.views.TypeFaceTextView; @@ -778,9 +781,16 @@ public class HomeFragment extends BaseFragment { */ private void chooseFuncPage(NewsTabBean mainFuncBean) { if ("精彩活动".equals(mainFuncBean.getDirectoriesName())) { - ARouter.getInstance() - .build(PathConfig.PATH_MODULEACTIVITY_ACTIVITY_MAIN) - .navigation(); + Intent intent= new Intent(mActivity,CommonWebActivity.class); +// intent.setData(Uri.parse("http://weixin.qq.com/r/tR28uI-EHEdgKcvbb0gx")); +// intent.setPackage(getContext().getPackageName()); +// intent.putExtra(Intent.EXTRA_SUBJECT,"Share"); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + +// ARouter.getInstance() +// .build(PathConfig.PATH_MODULEACTIVITY_ACTIVITY_MAIN) +// .navigation(); } else if ("场馆导航".equals(mainFuncBean.getDirectoriesName())) { mMainActivity.setCurrentPage(2, "场馆"); } else if ("非遗文化".equals(mainFuncBean.getDirectoriesName())) {