package com.weikou.beibeivideo.ui.login; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.CheckBox; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.lcjian.library.dialog.DialogUtil; import com.lcjian.library.permission.PermissionHelper; import com.lcjian.library.permission.PermissionInterface; import com.lcjian.library.util.SingleToast; import com.lcjian.library.util.common.DeviceUtil; import com.lcjian.library.util.common.StringUtils; import com.tencent.mm.opensdk.modelmsg.SendAuth; import com.umeng.socialize.UMAuthListener; import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.bean.SHARE_MEDIA; import com.weikou.beibeivideo.BasicTextHttpResponseHandler; import com.weikou.beibeivideo.BeibeiVideoAPI; import com.weikou.beibeivideo.BeibeiVideoApplication; import com.weikou.beibeivideo.R; import com.weikou.beibeivideo.ui.BaseActivity; import com.weikou.beibeivideo.ui.mine.BrowserActivity; import com.weikou.beibeivideo.util.BeibeiConstant; import com.weikou.beibeivideo.util.ConfigUtil; import com.weikou.beibeivideo.util.ui.TopStatusSettings; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import java.util.List; import java.util.Map; import androidx.annotation.NonNull; public class LoginActivity extends BaseActivity implements OnClickListener, PermissionInterface { public static final int RESULT_LOGIN = 10; private LinearLayout ll_login_qq, ll_login_wx; private boolean isTouchLogin;// 用户是否点击登录 private String uid; private String loginType = "";// 登录类型 默认为空字符 QQ为1 private String openId = "";// 用户第三方登录唯一识别码 private LinearLayout ll_login_content, ll_third_login; private EditText et_name; private EditText et_pwd; private CheckBox cb_user_agreement; private TextView tv_forget_pwd; private TextView tv_register; private TextView tv_login, tv_other_login, tv_title; private PermissionHelper mPermissionsChecker; // 权限检测器 检测是否有储存卡写入读取权限 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //防止截屏攻击风险 if (!BeibeiConstant.IS_TEST) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); } setContentView(R.layout.act_login); TopStatusSettings.setStatusViewAndDeepColor(this); uid = getSharedPreferences("user", Context.MODE_PRIVATE).getString( "uid", ""); ll_login_qq = findViewById(R.id.ll_login_qq); tv_other_login = findViewById(R.id.tv_other_login); tv_title = findViewById(R.id.tv_title); findViewById(R.id.ll_login_qq).setOnClickListener(this); findViewById(R.id.ll_login_wx).setOnClickListener(this); findViewById(R.id.login_tv_cancel).setOnClickListener(this); ll_login_content = findViewById(R.id.ll_login_content); ll_third_login = findViewById(R.id.ll_third_login); int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); ll_login_content.measure(w, h); et_name = (EditText) findViewById(R.id.et_name); et_pwd = (EditText) findViewById(R.id.et_pwd); cb_user_agreement = (CheckBox) findViewById(R.id.cb_user_agreement); tv_forget_pwd = (TextView) findViewById(R.id.tv_forget_pwd); tv_register = (TextView) findViewById(R.id.tv_register); tv_login = (TextView) findViewById(R.id.tv_login); tv_forget_pwd.setOnClickListener(this); tv_register.setOnClickListener(this); tv_login.setOnClickListener(this); tv_other_login.setOnClickListener(this); findViewById(R.id.tv_user_agreement).setOnClickListener(this); findViewById(R.id.tv_privacy_policy).setOnClickListener(this); setLoginType(false); mPermissionsChecker = new PermissionHelper(this, this);//权限 } private void setLoginType(boolean email) { if (email) { tv_other_login.setVisibility(View.GONE); ll_third_login.setVisibility(View.GONE); ll_login_content.setVisibility(View.VISIBLE); tv_title.setText("其他登录方式"); } else { tv_other_login.setVisibility(View.VISIBLE); ll_third_login.setVisibility(View.VISIBLE); ll_login_content.setVisibility(View.GONE); tv_title.setText("账号登录"); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.login_tv_cancel:// 取消 if (ll_third_login.getVisibility() == View.GONE) { setLoginType(false); } else { onResult(RESULT_CANCELED); } break; case R.id.tv_other_login: if (ConfigUtil.isOnLining(getApplicationContext())) { startActivity(new Intent(this, PhoneLoginActivity.class).putExtra("login", true)); finish(); } else { setLoginType(true); } break; case R.id.ll_login_qq:// QQ登录 if (!cb_user_agreement.isChecked()) { SingleToast.showToast(LoginActivity.this, "选择同意用户协议后方可登录"); break; } if (Build.VERSION.SDK_INT < 30&&false) { //Android 11以下的要请求安装应用列表 if (mPermissionsChecker.lacksPermissions(getPermissions())) {//检测是否有写入的权限 mPermissionsChecker.showNormalDialog("设备应用列表权限说明", "判断设备是否安装QQ/微信,用于三方登录"); return; } } if (isQQClientAvailable(getApplicationContext())) { loginType = "1"; // qq登录逻辑处理 点击登录后需要暂时锁定返回键和返回功能 不然会报错 lockBack(true); UMShareAPI.get(LoginActivity.this).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, authListener); } else { Toast.makeText(LoginActivity.this, "QQ不可用,请查询手机是否安装QQ...", Toast.LENGTH_LONG).show(); } break; case R.id.ll_login_wx://微信登录 if (!cb_user_agreement.isChecked()) { SingleToast.showToast(LoginActivity.this, "选择同意用户协议后方可登录"); break; } // Toast.makeText(this, String.format("基带版本:%s SDK版本:%s", Build.BRAND, Build.VERSION.SDK_INT), Toast.LENGTH_LONG).show(); if (Build.VERSION.SDK_INT < 30&&false) { //Android 11以下的要请求安装应用列表 if (mPermissionsChecker.lacksPermissions(getPermissions())) {//检测是否有写入的权限 mPermissionsChecker.showNormalDialog("设备应用列表权限说明", "判断设备是否安装QQ/微信,用于三方登录"); return; } } if (isWXClientAvailable(getApplicationContext())) { loginType = "2"; SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "buwan"; BeibeiVideoApplication.application.mWxApi.sendReq(req); } else { Toast.makeText(LoginActivity.this, "微信不可用,请查询手机是否安装微信...", Toast.LENGTH_LONG).show(); } break; case R.id.tv_forget_pwd: startActivity(new Intent(LoginActivity.this, ForgetPwdActivity.class)); break; case R.id.tv_user_agreement: Intent intent = new Intent(LoginActivity.this, BrowserActivity.class); intent.putExtra("url", BeibeiConstant.USER_AGREEMENT); startActivity(intent); break; case R.id.tv_privacy_policy: Intent intent1 = new Intent(this, BrowserActivity.class); intent1.putExtra("url", BeibeiConstant.PRIVACY_POLICY); startActivity(intent1); break; case R.id.tv_register: startActivity(new Intent(LoginActivity.this, RegisterActivity.class)); break; case R.id.tv_login: if (cb_user_agreement.isChecked()) emailLogin(); else SingleToast.showToast(LoginActivity.this, "选择同意用户协议后方可登录"); break; } } /** * 判断qq是否可用 */ public static boolean isQQClientAvailable(Context context) { PackageManager packageManager = context.getPackageManager(); try { // 尝试获取应用信息 packageManager.getPackageInfo("com.tencent.mobileqq", PackageManager.GET_ACTIVITIES); return true; } catch (PackageManager.NameNotFoundException e) { // 应用未找到,返回 false return false; } } public static boolean isWXClientAvailable(Context context) { PackageManager packageManager = context.getPackageManager(); try { // 尝试获取应用信息 packageManager.getPackageInfo("com.tencent.mm", PackageManager.GET_ACTIVITIES); return true; } catch (PackageManager.NameNotFoundException e) { // 应用未找到,返回 false return false; } } UMAuthListener authListener = new UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { DialogUtil.show(loadingDialog); } @Override public void onComplete(SHARE_MEDIA platform, int action, final Map data) { DialogUtil.dismiss(loadingDialog); Log.i("mResult", "返回的数据为----" + data); BeibeiVideoAPI.userLogin(LoginActivity.this, uid, data.get("name"), data.get("openid"), data.get("iconurl"), data.get("gender"), data.get("province"), data.get("city"), loginType, new BasicTextHttpResponseHandler() { @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { Log.i("mResult", "上传数据到服务器成功!"); // SingleToast.showToast(LoginActivity.this, "数据上传成功!"); // 写入sharedpreference Editor edit = getSharedPreferences("user", Context.MODE_PRIVATE).edit(); edit.putString("portrait", data.get("iconurl")); edit.putString("LoginUid", jsonObject.getJSONObject("Data") .getString("LoginUid")); edit.putString("name", data.get("name")); edit.putString("sex", data.get("gender")); edit.commit(); SingleToast.showToast(LoginActivity.this, "登录成功"); onResult(RESULT_OK); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); SingleToast.showToast(LoginActivity.this, "登录失败"); // Log.i("mResult", "上传数据到服务器成功!"); } @Override public void onFinish() { super.onFinish(); DialogUtil.dismiss(loadingDialog); } }); } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { lockBack(false); DialogUtil.dismiss(loadingDialog); Toast.makeText(LoginActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show(); } @Override public void onCancel(SHARE_MEDIA platform, int action) { lockBack(false); DialogUtil.dismiss(loadingDialog); Toast.makeText(LoginActivity.this, "取消了", Toast.LENGTH_LONG).show(); } }; /** * Email登录 */ private void emailLogin() { SharedPreferences preferences = getSharedPreferences("user", MODE_PRIVATE); String uid = preferences.getString("uid", ""); String name = et_name.getText().toString(); String pwd = et_pwd.getText().toString(); if (StringUtils.isEmpty(name) || StringUtils.isEmpty(pwd)) { SingleToast.showToast(this, "账号或密码为空!"); return; } BeibeiVideoAPI.emailLogin(this, uid, name, pwd, new BasicTextHttpResponseHandler() { @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { if (jsonObject.optBoolean("IsPost")) { Log.i("mResult", "登录后返回的值为:" + jsonObject.toString()); SharedPreferences sp = getSharedPreferences("user", MODE_PRIVATE); Editor edit = sp.edit(); edit.putString("portrait", jsonObject.optJSONObject("Data").optString("Portrait")); edit.putString("LoginUid", jsonObject.getJSONObject("Data") .getString("Id")); edit.putString("name", jsonObject.optJSONObject("Data").optString("Nickname")); edit.commit(); SingleToast.showToast(LoginActivity.this, "登录成功" + "昵称为:" + jsonObject.optJSONObject("Data").optString("Nickname")); onResult(RESULT_OK); } else { SingleToast.showToast(LoginActivity.this, "登录失败"); } } @Override public void onStart() { super.onStart(); DialogUtil.show(loadingDialog); } @Override public void onFinish() { super.onFinish(); DialogUtil.dismiss(loadingDialog); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); SingleToast.showToast(LoginActivity.this, "登录失败"); } }); } @Override public void onResume() { super.onResume(); if (!StringUtils.isEmpty(getSharedPreferences("user", Context.MODE_PRIVATE).getString("LoginUid", ""))) { onResult(RESULT_OK); } } @Override public void onPause() { super.onPause(); } /** * 锁定返回 */ private void lockBack(boolean isSure) { isTouchLogin = isSure; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (isTouchLogin && keyCode == KeyEvent.KEYCODE_BACK) { return false; } return super.onKeyDown(keyCode, event); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); } Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { final JSONObject response = (JSONObject) msg.obj; try { Log.i("mResult", "头像路径:----" + response .getString("figureurl_qq_2")); // SingleToast.showToast(LoginActivity.this, "第三方登录成功,开始上传数据!"); BeibeiVideoAPI.userLogin(LoginActivity.this, uid, response.getString("nickname"), openId, response.getString("figureurl_qq_2"), response.getString("gender"), response.getString("province"), response.getString("city"), loginType, new BasicTextHttpResponseHandler() { @Override public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { Log.i("mResult", "上传数据到服务器成功!"); // SingleToast.showToast(LoginActivity.this, "数据上传成功!"); // 写入sharedpreference Editor edit = getSharedPreferences("user", Context.MODE_PRIVATE).edit(); edit.putString("portrait", response .getString("figureurl_qq_2")); edit.putString("LoginUid", jsonObject.getJSONObject("Data") .getString("LoginUid")); edit.putString("name", response.getString("nickname")); edit.putString("sex", response.getString("gender")); edit.commit(); SingleToast.showToast(LoginActivity.this, "登录成功"); onResult(RESULT_OK); } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { super.onFailure(statusCode, headers, responseString, throwable); SingleToast.showToast(LoginActivity.this, "登录失败"); // Log.i("mResult", "上传数据到服务器成功!"); } @Override public void onFinish() { super.onFinish(); DialogUtil.dismiss(loadingDialog); } }); } catch (JSONException e) { e.printStackTrace(); } } } }; private void onResult(int resultCode) { boolean result = getIntent().getBooleanExtra("result", false); if (result) { Intent intent = new Intent(); //把返回数据存入Intent setResult(resultCode, intent); //关闭Activity finish(); } else { //关闭Activity finish(); } } @Override public int getPermissionsRequestCode() { return 20001; } @Override public String[] getPermissions() { return new String[]{Manifest.permission.INSTALL_PACKAGES}; } @Override public void requestPermissionsSuccess() { DeviceUtil.getInstalledPackages(this); } @Override public void requestPermissionsFail() { } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (mPermissionsChecker.requestPermissionsResult(requestCode, permissions, grantResults)) { //权限请求结果,并已经处理了该回调 return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }