app/src/main/java/com/moral/yunfushao/MainActivity.java
@@ -142,7 +142,9 @@ @Override protected void initData() { prepare(); //验证微信登陆 wxLoadingOutTime(); // prepare(); if (MainApp.theApp.bleManager != null) { if (MainApp.theApp.bleManager.isSupportBle()) { MainApp.theApp.bleManager.enableBluetooth(); @@ -155,6 +157,13 @@ getAd(); } /** * 判断是否已经是最后期限 */ private void wxLoadingOutTime() { } @Override protected void processClick(View view) { app/src/main/java/com/moral/yunfushao/MainApp.java
@@ -47,10 +47,12 @@ OkGo.getInstance().setCookieStore(new PersistentCookieStore()); if (sharedPreferencesUtil == null) { sharedPreferencesUtil = new SharedPreferencesUtil(this); sharedPreferencesUtil = SharedPreferencesUtil.getUtil(this); } userId = sharedPreferencesUtil.getUserid(); if (MainApp.theApp.sharedPreferencesUtil.getVoiceType() == 0) { AppConfig.voideUrl1 = "http://yfsapi.7drlb.com/video/boy/music.mp3"; AppConfig.voideUrl2 = "http://yfsapi.7drlb.com/video/boy/music1.mp3"; app/src/main/java/com/moral/yunfushao/activity/LoginActivity.java
@@ -1,5 +1,6 @@ package com.moral.yunfushao.activity; import android.animation.ObjectAnimator; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; @@ -36,6 +37,7 @@ private TextView tv_forget, tv_register; private EditText et_phone, et_pwd; private IWXAPI iwxapi; private ObjectAnimator animator; @Override protected void getBundleExtras(Bundle extras) { @@ -77,8 +79,24 @@ et_phone = findView(R.id.et_phone); et_pwd = findView(R.id.et_pwd); weixinlogin = findView(R.id.weixinlogin); // et_phone.setText("18362724160"); // et_pwd.setText("123456"); initAnimator(); } private void initAnimator() { // ObjectAnimator an = ObjectAnimator.ofFloat(bt_sure, "translationX", 500f, 0f); // an.start(); //// ObjectAnimator translationY = ObjectAnimator.ofFloat(bt_sure, "rotation", 360f, 0f); // ObjectAnimator scaleY = ObjectAnimator.ofFloat(bt_sure, "scaleY", 0f, 1f); // ObjectAnimator scaleX = ObjectAnimator.ofFloat(bt_sure, "scaleX", 0f, 1f); // // AnimatorSet oo = new AnimatorSet(); // oo.playTogether(scaleY, scaleX); // oo.setDuration(500); // oo.start(); } @Override @@ -86,6 +104,7 @@ bt_sure.setOnClickListener(this); tv_forget.setOnClickListener(this); tv_register.setOnClickListener(this); weixinlogin.setOnClickListener(this); } @Override app/src/main/java/com/moral/yunfushao/activity/SplashActivity.java
@@ -5,11 +5,21 @@ import android.text.TextUtils; import android.view.View; import com.lzy.okgo.cache.CacheMode; import com.moral.andbrickslib.utils.GsonUtil; import com.moral.andbrickslib.utils.NetworkUtil; import com.moral.andbrickslib.utils.StatusBarUtil; import com.moral.yunfushao.wxapi.WXEntryActivity; import com.moral.yunfushao.wxapi.data.AccessTokenBean; import com.moral.yunfushao.wxapi.data.TokenEffectivenessBean; import com.moral.yunfushao.MainActivity; import com.moral.yunfushao.MainApp; import com.moral.yunfushao.R; import com.moral.yunfushao.base.BaseActivity; import com.moral.yunfushao.common.WXConstants; import com.moral.yunfushao.httputils.HttpCallBack; import com.moral.yunfushao.httputils.WXHttpUtil; import com.moral.yunfushao.utils.SharedPreferencesUtil; /** @@ -17,6 +27,8 @@ */ public class SplashActivity extends BaseActivity implements Runnable{ private AccessTokenBean bean = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -71,6 +83,82 @@ } catch(InterruptedException e) { e.printStackTrace(); } bean = SharedPreferencesUtil.getUtil(this).getWXToken(); if (NetworkUtil.isAvailable(this)) { //网络可用状态是否 if (bean == null) { goHome(); //非微信登陆 } else { //微信登陆 // checkWXLogin(); checkTokenEffective(); } } } /** * 判断是否token有效 */ private void checkTokenEffective() { //https:api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID String url = "https:api.weixin.qq.com/sns/auth?access_token=" + bean.getAccess_token() + "&openid=" + WXConstants.APP_ID; WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() { @Override public void onSuccess(String res, String msg) { TokenEffectivenessBean bean = GsonUtil.toObj(msg, TokenEffectivenessBean.class); if (bean.getErrcode() == 0) { //成功授权 checkWXLogin(); } } @Override public void showLoadingDialog() { } @Override public void onFail(int errno, String s) { //无效直接 goHome(); } }); } /** * 检查是否登陆失效 */ private void checkWXLogin() { // String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid= " + WXConstants.APP_ID + "&secret=" + "应用密钥" + "&code="+ WXEntryActivity.code + "&grant_type=authorization_code"; // String url = "https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID"; WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() { @Override public void onSuccess(String res, String msg) { AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class); } @Override public void showLoadingDialog() { // } @Override public void onFail(int errno, String s) { goHome(); } }); } private void goHome() { if(!TextUtils.isEmpty(MainApp.userId)){ Intent intent = new Intent(this, MainActivity.class); startActivity(intent); app/src/main/java/com/moral/yunfushao/common/WXConstants.java
New file @@ -0,0 +1,18 @@ package com.moral.yunfushao.common; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/26. * @Package_name: pregnancy_guard_android */ public class WXConstants { // APP_ID 替换为你的应用从官方网站申请到的合法appId public static final String APP_ID = "wxd930ea5d5a258f4f"; public static class ShowMsgActivity { public static final String STitle = "showmsg_title"; public static final String SMessage = "showmsg_message"; public static final String BAThumbData = "showmsg_thumb_data"; } } app/src/main/java/com/moral/yunfushao/httputils/WXHttpUtil.java
New file @@ -0,0 +1,41 @@ package com.moral.yunfushao.httputils; import com.lzy.okgo.OkGo; import com.lzy.okgo.cache.CacheMode; import com.lzy.okgo.callback.StringCallback; import okhttp3.Call; import okhttp3.Response; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/26. * @Package_name: pregnancy_guard_android */ public class WXHttpUtil { public static void doGet(String url, CacheMode cacheMode, final HttpCallBack httpCallBack) { OkGo.get(url) .cacheKey(String.valueOf(url)) .tag(String.valueOf(url)) .cacheMode(cacheMode) .execute(new StringCallback() { @Override public void onSuccess(String s, Call call, Response response) { //如何保存accessTokenBean if (httpCallBack != null) { httpCallBack.onSuccess(response.message(), s); } } @Override public void onError(Call call, Response response, Exception e) { super.onError(call, response, e); if (httpCallBack != null) { httpCallBack.onFail(response.code(), null); } //{"errcode":40029,"errmsg":"invalid code"} } }); } } app/src/main/java/com/moral/yunfushao/model/User.java
app/src/main/java/com/moral/yunfushao/ui/PanelView.java
@@ -14,7 +14,6 @@ import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; import android.view.animation.Animation; import com.moral.yunfushao.R; @@ -187,8 +186,7 @@ postInvalidate(); } }); anim.setDuration(3000L); anim.setRepeatCount(Animation.INFINITE); anim.setDuration(500L); anim.start(); } // app/src/main/java/com/moral/yunfushao/utils/SharedPreferencesUtil.java
@@ -4,19 +4,70 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import com.moral.andbrickslib.utils.GsonUtil; import com.moral.yunfushao.wxapi.data.AccessTokenBean; import com.moral.yunfushao.MainApp; import com.moral.yunfushao.model.User; public class SharedPreferencesUtil { private Context mContext; private static Context mContext = null; public final static String SP_LOGIN_USER_KEY = "login_user"; public final static String SP_BLE = "ble"; public SharedPreferencesUtil(Context context) { this.mContext = context; public static SharedPreferencesUtil getUtil(Context context) { mContext = context; return Instants.sharedPreferencesUtil; } public static class Instants { public static SharedPreferencesUtil sharedPreferencesUtil = new SharedPreferencesUtil(); } /** * 获取登陆模式,手机登陆和微信登陆 * * @return */ public static boolean getLoginModel() { SharedPreferences preferences = mContext.getSharedPreferences(SP_LOGIN_USER_KEY, Context.MODE_PRIVATE); return preferences.getBoolean("wx", false); } /** * 保存微信登陆Token */ public void saveWXToken(AccessTokenBean bean) { SharedPreferences preferences = mContext.getSharedPreferences(SP_LOGIN_USER_KEY, Context.MODE_PRIVATE); Editor edit = preferences.edit(); edit.putString("token_wx", GsonUtil.toStr(bean)); edit.commit(); } /** * 保存微信登陆Token */ public AccessTokenBean getWXToken() { SharedPreferences preferences = mContext.getSharedPreferences(SP_LOGIN_USER_KEY, Context.MODE_PRIVATE); String s = preferences.getString("token_wx", null); if (s == null) { return null; } else return GsonUtil.toObj(s, AccessTokenBean.class); } /** * 保存微信登陆Token */ public void removeWXToken() { SharedPreferences preferences = mContext.getSharedPreferences(SP_LOGIN_USER_KEY, Context.MODE_PRIVATE); Editor edit = preferences.edit(); edit.putString("token_wx", null); } /** * 保存蓝牙设备信息 * * @param mac */ public void saveBLE(String mac){ @@ -32,8 +83,14 @@ return mac; } /** * 账户登陆 * 账户登陆清空微信登陆 * * @param loginUser */ public void saveLoginInfo(User loginUser){ removeWXToken(); SharedPreferences preferences = mContext.getSharedPreferences(SP_LOGIN_USER_KEY, Context.MODE_PRIVATE); Editor editor = preferences.edit(); editor.putString("id",loginUser.get_id()); @@ -82,6 +139,7 @@ editor.putInt("video",video); editor.commit(); } public void setRefreh(int refresh){ SharedPreferences preferences = mContext.getSharedPreferences(SP_LOGIN_USER_KEY, Context.MODE_PRIVATE); Editor editor = preferences.edit(); @@ -108,6 +166,7 @@ /** * 保存是否第一次登陆 * * @param flag */ public void saveFirstUse(int flag) { @@ -143,6 +202,7 @@ /** * 铃声 * * @param video */ public void saveVideoList(String video) { app/src/main/java/com/moral/yunfushao/wxapi/WXEntryActivity.java
New file @@ -0,0 +1,185 @@ package com.moral.yunfushao.wxapi; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.widget.Toast; import com.lzy.okgo.cache.CacheMode; import com.moral.andbrickslib.utils.GsonUtil; import com.moral.yunfushao.MainActivity; import com.moral.yunfushao.common.WXConstants; import com.moral.yunfushao.httputils.HttpCallBack; import com.moral.yunfushao.httputils.WXHttpUtil; import com.moral.yunfushao.model.User; import com.moral.yunfushao.wxapi.data.AccessTokenBean; import com.moral.yunfushao.wxapi.data.WXUserBean; import com.tencent.mm.opensdk.constants.ConstantsAPI; import com.tencent.mm.opensdk.modelbase.BaseReq; import com.tencent.mm.opensdk.modelbase.BaseResp; import com.tencent.mm.opensdk.modelmsg.SendAuth; import com.tencent.mm.opensdk.modelmsg.ShowMessageFromWX; import com.tencent.mm.opensdk.modelmsg.WXAppExtendObject; import com.tencent.mm.opensdk.modelmsg.WXMediaMessage; import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; import com.tencent.mm.opensdk.openapi.WXAPIFactory; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/26. * @Package_name: pregnancy_guard_android */ public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api; public static String code = ""; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); api = WXAPIFactory.createWXAPI(this, WXConstants.APP_ID, false); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { switch (baseReq.getType()) { case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: goToGetMsg(); break; case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX: goToShowMsg((ShowMessageFromWX.Req) baseReq); break; default: break; } } @Override public void onResp(BaseResp baseResp) { String result; Toast.makeText(this, "baseresp.getType = " + baseResp.getType(), Toast.LENGTH_SHORT).show(); switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: code = ((SendAuth.Resp) baseResp).code; result = "授权成功"; checkWXLogin(); //用户同意 break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = "发送取消"; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = "发送被拒绝"; break; case BaseResp.ErrCode.ERR_UNSUPPORT: result = "不支持错误"; break; default: result = "发送返回"; break; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); } /** * 检查是否登陆失效 */ private void checkWXLogin() { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid= " + WXConstants.APP_ID + "&secret=" + "应用密钥" + "&code=" + WXEntryActivity.code + "&grant_type=authorization_code"; WXHttpUtil.doGet(url, CacheMode.DEFAULT, new HttpCallBack() { @Override public void onSuccess(String res, String msg) { AccessTokenBean accessTokenBean = GsonUtil.toObj(msg, AccessTokenBean.class); if (accessTokenBean.getAccess_token() == null && accessTokenBean.getOpenid() == null) getUserInfor(accessTokenBean.getAccess_token(), accessTokenBean.getOpenid()); } @Override public void showLoadingDialog() { // } @Override public void onFail(int errno, String s) { } }); } /** * 获取到用户的信息 * * @param access_token * @param openid */ private void getUserInfor(String access_token, String openid) { String path = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid; WXHttpUtil.doGet(path, CacheMode.DEFAULT, new HttpCallBack() { @Override public void onSuccess(String res, String msg) { WXUserBean bean = new WXUserBean(); User user = new User(); user.set_id(bean.getOpenid()); user.setNickname(bean.getNickname()); } @Override public void showLoadingDialog() { } @Override public void onFail(int errno, String s) { } }); } private void goToGetMsg() { Intent intent = new Intent(this, MainActivity.class); intent.putExtras(getIntent()); startActivity(intent); finish(); } private void goToShowMsg(ShowMessageFromWX.Req showReq) { WXMediaMessage wxMsg = showReq.message; WXAppExtendObject obj = (WXAppExtendObject) wxMsg.mediaObject; StringBuffer msg = new StringBuffer(); // 组织一个待显示的消息内容 msg.append("description: "); msg.append(wxMsg.description); msg.append("\n"); msg.append("extInfo: "); msg.append(obj.extInfo); msg.append("\n"); msg.append("filePath: "); msg.append(obj.filePath); Intent intent = new Intent(this, MainActivity.class); intent.putExtra(WXConstants.ShowMsgActivity.STitle, wxMsg.title); intent.putExtra(WXConstants.ShowMsgActivity.SMessage, msg.toString()); intent.putExtra(WXConstants.ShowMsgActivity.BAThumbData, wxMsg.thumbData); startActivity(intent); finish(); } } app/src/main/java/com/moral/yunfushao/wxapi/data/AccessTokenBean.java
New file @@ -0,0 +1,83 @@ package com.moral.yunfushao.wxapi.data; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/26. * @Package_name: pregnancy_guard_android * 微信登陆第二步:通过code获取access_token * 获取第一步的code后,请求以下链接获取access_token: * access_token 接口调用凭证 * expires_in access_token接口调用凭证超时时间,单位(秒) * refresh_token 用户刷新access_token * openid 授权用户唯一标识 * scope 用户授权的作用域,使用逗号(,)分隔 * unionid 当且仅当该移动应用已获得该用户的userinfo授权时,才会出现该字段 * */ public class AccessTokenBean { /** * access_token : ACCESS_TOKEN * expires_in : 7200 * refresh_token : REFRESH_TOKEN * openid : OPENID * scope : SCOPE * unionid : o6_bmasdasdsad6_2sgVt7hMZOPfL */ private String access_token; private int expires_in; private String refresh_token; private String openid; private String scope; private String unionid; 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; } public String getRefresh_token() { return refresh_token; } public void setRefresh_token(String refresh_token) { this.refresh_token = refresh_token; } public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; } public String getUnionid() { return unionid; } public void setUnionid(String unionid) { this.unionid = unionid; } } app/src/main/java/com/moral/yunfushao/wxapi/data/TokenEffectivenessBean.java
New file @@ -0,0 +1,34 @@ package com.moral.yunfushao.wxapi.data; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/26. * @Package_name: pregnancy_guard_android */ public class TokenEffectivenessBean { /** * errcode : 0 * errmsg : ok */ private int errcode; private String errmsg; 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; } } app/src/main/java/com/moral/yunfushao/wxapi/data/WXUserBean.java
New file @@ -0,0 +1,106 @@ package com.moral.yunfushao.wxapi.data; import java.util.List; /** * @author : chenqi. * @e_mail : 1650699704@163.com. * @create_time : 2018/11/26. * @Package_name: pregnancy_guard_android */ public class WXUserBean { /** * openid : OPENID * nickname : NICKNAME * sex : 1 * province : PROVINCE * city : CITY * country : COUNTRY * headimgurl : http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0 * privilege : ["PRIVILEGE1","PRIVILEGE2"] * unionid : o6_bmasdasdsad6_2sgVt7hMZOPfL */ private String openid; private String nickname; private int sex; private String province; private String city; private String country; private String headimgurl; private String unionid; private List<String> privilege; public String getOpenid() { return openid; } public void setOpenid(String openid) { this.openid = openid; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getHeadimgurl() { return headimgurl; } public void setHeadimgurl(String headimgurl) { this.headimgurl = headimgurl; } public String getUnionid() { return unionid; } public void setUnionid(String unionid) { this.unionid = unionid; } public List<String> getPrivilege() { return privilege; } public void setPrivilege(List<String> privilege) { this.privilege = privilege; } }