This commit is contained in:
2025-11-18 15:12:24 +08:00
parent c173c425ce
commit a7d2035e70
1361 changed files with 367452 additions and 0 deletions
@@ -0,0 +1,70 @@
package cn.shangyu.gdxzExpert.utils;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
*
* @author ZHAODeWei 万方医学加密 解密
*
*/
public class AESUtil {
// 加密
public static String Encrypt(String sSrc, String sKey) throws Exception {
if (sKey == null) {
return null;
}
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// "算法/模式/补码方式"
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new String(Base64.encodeBase64(encrypted));// 此处使用BASE64做转码功能,同时能起到2次加密的作用。
}
// 解密
public static String Decrypt(String sSrc, String sKey) throws Exception {
try {
// 判断Key是否正确
if (sKey == null) {
return null;
}
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encrypted1 = Base64.decodeBase64(sSrc.getBytes());// ����base64����
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
return originalString;
} catch (Exception e) {
return null;
}
} catch (Exception ex) {
return null;
}
}
/* public static void main(String[] args) throws Exception {
* 此处使用AES-128-ECB加密模式,key需要为16位。
String cKey = "iGandan201607110";
// 需要加密的字串
String cSrc = "iGandan";
// 加密
String enString = AESUtil.Encrypt(cSrc, cKey);
System.out.println(enString);
// 解密
String DeString = AESUtil.Decrypt(enString, cKey);
System.out.println(DeString);
}*/
}
@@ -0,0 +1,94 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
/**
* 应用前后台状态监听帮助类,仅在Application中使用
* Created by dway on 2018/1/30.
*/
public class AppFrontBackHelper {
private OnAppStatusListener mOnAppStatusListener;
public AppFrontBackHelper() {
}
/**
* 注册状态监听,仅在Application中使用
* @param application
* @param listener
*/
public void register(Application application, OnAppStatusListener listener){
mOnAppStatusListener = listener;
application.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
public void unRegister(Application application){
application.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
private Application.ActivityLifecycleCallbacks activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {
//打开的Activity数量统计
private int activityStartCount = 0;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
activityStartCount++;
//数值从0变到1说明是从后台切到前台
if (activityStartCount == 1){
//从后台切到前台
if(mOnAppStatusListener != null){
mOnAppStatusListener.onFront();
}
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
activityStartCount--;
//数值从1到0说明是从前台切到后台
if (activityStartCount == 0){
//从前台切到后台
if(mOnAppStatusListener != null){
mOnAppStatusListener.onBack();
}
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
public interface OnAppStatusListener{
void onFront();
void onBack();
}
}
@@ -0,0 +1,51 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.widget.EditText;
public class AutoGetCode extends ContentObserver {
private Cursor cursor = null;
private Activity activity;
private String smsContent = "";
private EditText editText = null;
public AutoGetCode(Activity activity, Handler handler, EditText edittext) {
super(handler);
this.activity = activity;
this.editText = edittext;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// 读取收件箱中指定号码的短信
cursor = activity.managedQuery(Uri.parse("content://sms/inbox"),
new String[] { "_id", "address", "read", "body" }, "address=? and read=?",
null, "_id desc");
// 按短信id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
if (cursor.moveToFirst()) {
String smsbody = cursor
.getString(cursor.getColumnIndex("body"));
String regEx = "(?<![0-9])([0-9]{" + 6 + "})(?![0-9])";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(smsbody.toString());
while (m.find()) {
smsContent = m.group();
editText.setText(smsContent);
}
}
}
}
}
@@ -0,0 +1,61 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.List;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
public class BackHandlerHelper {
/**
* 将back事件分发给 FragmentManager 中管理的子Fragment,如果该 FragmentManager 中的所有Fragment都
* 没有处理back事件,则尝试 FragmentManager.popBackStack()
*
* @return 如果处理了back键则返回 <b>true</b>
* @see #handleBackPress(Fragment)
* @see #handleBackPress(FragmentActivity)
*/
public static boolean handleBackPress(FragmentManager fragmentManager) {
List<Fragment> fragments = fragmentManager.getFragments();
if (fragments == null) return false;
for (int i = fragments.size() - 1; i >= 0; i--) {
Fragment child = fragments.get(i);
if (isFragmentBackHandled(child)) {
return true;
}
}
if (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStack();
return true;
}
return false;
}
public static boolean handleBackPress(Fragment fragment) {
return handleBackPress(fragment.getChildFragmentManager());
}
public static boolean handleBackPress(FragmentActivity fragmentActivity) {
return handleBackPress(fragmentActivity.getSupportFragmentManager());
}
/**
* 判断Fragment是否处理了Back键
*
* @return 如果处理了back键则返回 <b>true</b>
*/
public static boolean isFragmentBackHandled(Fragment fragment) {
return fragment != null
&& fragment.isVisible()
// && fragment.getUserVisibleHint() //for ViewPager
&& fragment instanceof FragmentBackHandler
&& ((FragmentBackHandler) fragment).onBackPressed();
}
public interface FragmentBackHandler {
boolean onBackPressed();
}
}
@@ -0,0 +1,24 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.Context;
import me.leolin.shortcutbadger.ShortcutBadger;
/**
* Created by 周旭 on 2017/4/12.
* 第三方库设置APP logo角标数量的工具类(机型适配比较好)
*/
public class BadgeCountUtils {
//设置APP logo的角标
public static void setBadgeCount(Context context, int badgeCount) {
ShortcutBadger.applyCount(context, badgeCount); //for 1.1.4+
}
//移除角标
public static void removeBadge(Context context) {
ShortcutBadger.removeCount(context); //for 1.1.4+
}
}
@@ -0,0 +1,87 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
//BadgeUtil provides static utility methods to set "badge count" on Launcher (by Samsung, LG).
//Currently, it's working from Android 4.0. 目前只支持samsung和LG
//But some devices, which are released from the manufacturers, are not working.
/**
* android实现桌面icon未读信息图标 目前只支持samsung和LG,未测,
* 类名称:BadgeUtil
* 类描述:TODO
* 创建人:苏三元
* 时间:2015-10-17 上午11:04:02
* 版权:河南商宇科技有限公司--版权所有 (c) 2015
*
*/
public class BadgeUtil {
private static final String ACTION_BADGE_COUNT_UPDATE = "android.intent.action.BADGE_COUNT_UPDATE";
private static final String EXTRA_BADGE_COUNT = "badge_count";
private static final String EXTRA_BADGE_COUNT_PACKAGE_NAME = "badge_count_package_name";
private static final String EXTRA_BADGE_COUNT_CLASS_NAME = "badge_count_class_name";
public static int badgeCount = 0;
/**
* Set badge count
*
* @param context The context of the application package.
* @param count Badge count to be set
*/
public static void setBadgeCount(Context context, int count) {
Intent badgeIntent = new Intent(ACTION_BADGE_COUNT_UPDATE);
badgeIntent.putExtra(EXTRA_BADGE_COUNT, badgeCount);
badgeIntent.putExtra(EXTRA_BADGE_COUNT_PACKAGE_NAME, context.getPackageName());
badgeIntent.putExtra(EXTRA_BADGE_COUNT_CLASS_NAME, getLauncherClassName(context));
context.sendBroadcast(badgeIntent);
}
/**
* Reset badge count. The badge count is set to "0"
*
* @param context The context of the application package.
*/
public static void resetBadgeCount(Context context) {
badgeCount = 0;
setBadgeCount(context, 0);
}
/**
* Retrieve launcher activity name of the application from the context
*
* @param context The context of the application package.
* @return launcher activity name of this application. From the
* "android:name" attribute.
*/
private static String getLauncherClassName(Context context) {
PackageManager packageManager = context.getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN);
// To limit the components this Intent will resolve to, by setting an
// explicit package name.
intent.setPackage(context.getPackageName());
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// All Application must have 1 Activity at least.
// Launcher activity must be found!
ResolveInfo info = packageManager
.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
// get a ResolveInfo containing ACTION_MAIN, CATEGORY_LAUNCHER
// if there is no Activity which has filtered by CATEGORY_DEFAULT
if (info == null) {
info = packageManager.resolveActivity(intent, 0);
}
return info.activityInfo.name;
}
}
@@ -0,0 +1,38 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
/**
* Created by 周旭 on 2017/4/12.
* Android原生方式设置角标
*/
public class BadgeUtils {
private static final String INTENT_ACTION = "android.intent.action.BADGE_COUNT_UPDATE";
private static final String INTENT_EXTRA_BADGE_COUNT = "badge_count";
private static final String INTENT_EXTRA_PACKAGENAME = "badge_count_package_name";
private static final String INTENT_EXTRA_ACTIVITY_NAME = "badge_count_class_name";
//设置角标
public static void setBadgeCount(Context context, int badgeCount) {
Intent intent = new Intent(INTENT_ACTION);
intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount);
intent.putExtra(INTENT_EXTRA_PACKAGENAME, getComponentName(context).getPackageName());
intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, getComponentName(context).getClassName());
context.sendBroadcast(intent);
}
//清除角标
public static void removeBadge(Context context){
setBadgeCount(context,0);
}
//获取ComponentName
private static ComponentName getComponentName(Context context) {
return context.getApplicationContext().getPackageManager()
.getLaunchIntentForPackage(context.getApplicationContext().getPackageName())
.getComponent();
}
}
@@ -0,0 +1,202 @@
package cn.shangyu.gdxzExpert.utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import org.apache.commons.codec.binary.Base64;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.UnsupportedEncodingException;
import cn.shangyu.gdxzExpert.application.BaseApplication;
public class Base64Util {
/**
* 将对象进行base64编码
*
* @param object
* @return
*/
public static String ObjtoBase64(Object object) {
if (object == null) {
return null;
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = null;
String objBase64 = null;
try {
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
objBase64 = new String(Base64.encodeBase64(baos.toByteArray()));
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
return objBase64;
}
/**
* 将文件进行base64编码
*
* @param object
* @return
*/
public static String FiletoBase64(String path) throws Exception {
File file = new File(path);
FileInputStream inputFile = new FileInputStream(file);
byte[] buffer = new byte[(int) file.length()];
inputFile.read(buffer);
inputFile.close();
return new String(Base64.encodeBase64(buffer));
}
/**
* base64编码的对象解码出来
*
* @param key
* @return
*/
public static Object Base64toObj(String objBase64) {
if (TextUtils.isEmpty(objBase64)) {
return null;
}
// 对Base64格式的字符串进行解码
byte[] base64Bytes = Base64.decodeBase64(objBase64.getBytes());
ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
ObjectInputStream ois;
Object obj = null;
try {
ois = new ObjectInputStream(bais);
obj = (Object) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**
* 将图片进行base64编码
*
* @param
* @return
*/
public static String BitmaptoBase64(Bitmap bm) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
try {
int options = 100;
while (stream.toByteArray().length / 1024 > 200) {// 判断如果图片大于100kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
if (options > 0) {
options -= 10;
}
stream.reset();// 重置baos即清空baos
bm.compress(Bitmap.CompressFormat.JPEG, options, stream);// 这里压缩50%,把压缩后的数据存放到baos中
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] b = stream.toByteArray();
// 将图片流以字符串形式存储下来
String userimg = new String((Base64.encodeBase64(b))); // 在这里我们把图片转换成base64并存进userimg里面
return userimg;
}
/**
*
* 执业医师证图片或胸牌
* */
public static String BitmaptoBase64Xiongpai(Bitmap bm) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
// try {
// int options = 100;
// while (stream.toByteArray().length / 1024 > 200) {// 判断如果图片大于100kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
// if (options > 0) {
// options -= 10;
// }
// stream.reset();// 重置baos即清空baos
// bm.compress(Bitmap.CompressFormat.JPEG, options, stream);// 这里压缩50%,把压缩后的数据存放到baos中
// }
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
byte[] b = stream.toByteArray();
// 将图片流以字符串形式存储下来
String userimg = new String((Base64.encodeBase64(b))); // 在这里我们把图片转换成base64并存进userimg里面
return userimg;
}
/**
*
* BasetoBitmap 将图片进行base64解码
*
* @param string
* @return Bitmap
*/
public static Bitmap Base64toBitmap(String string) {
// 将字符串转换成Bitmap类型
Bitmap bitmap = null;
try {
byte[] bitmapArray = Base64.decodeBase64(string.getBytes());
bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0,
bitmapArray.length);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
public static String encodeBase64URLSafeString(String keyValueStr) throws UnsupportedEncodingException{
byte[] textByte = keyValueStr.getBytes("UTF-8");
//编码
String objBase64 = new String(Base64.encodeBase64(textByte));
// String base64Str=encoder.encodeToString(textByte);
String safeBase64Str = objBase64.replace('+', '-');
safeBase64Str = objBase64.replace('/', '_');
safeBase64Str = objBase64.replaceAll("=", "");
return safeBase64Str;
}
public static void saveBitmapAsJpg(Bitmap bitmap, String filename) {
if(bitmap==null)
{
return ;
}
// 获取外部存储的目录(确保已请求WRITE_EXTERNAL_STORAGE权限)
File file1 = BaseApplication.getInstance()
.getApplicationContext().getExternalFilesDir("");
// 创建文件对象
File file = new File(file1, filename + ".jpg");
try {
// 创建一个用于写入的FileOutputStream
FileOutputStream out = new FileOutputStream(file);
// 使用compress方法将Bitmap压缩为JPEG格式并写入文件
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
// 关闭输出流
out.flush();
out.close();
// 文件已成功保存
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,137 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.UnsupportedEncodingException;
/**
* @author Mr.Zheng
* @date 2014年8月22日 下午9:50:28
*/
public class Base64Utils
{
private static char[] base64EncodeChars = new char[]
{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', '+', '/' };
private static byte[] base64DecodeChars = new byte[]
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1,
-1, -1, -1 };
/**
* 加密
*
* @param data
* @return
*/
public static String encode(byte[] data)
{
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while (i < len)
{
b1 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
sb.append("==");
break;
}
b2 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
sb.append("=");
break;
}
b3 = data[i++] & 0xff;
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
sb.append(base64EncodeChars[b3 & 0x3f]);
}
return sb.toString();
}
/**
* 解密
*
* @param str
* @return
*/
public static byte[] decode(String str)
{
try
{
return decodePrivate(str);
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return new byte[]
{};
}
private static byte[] decodePrivate(String str) throws UnsupportedEncodingException
{
StringBuffer sb = new StringBuffer();
byte[] data = null;
data = str.getBytes("US-ASCII");
int len = data.length;
int i = 0;
int b1, b2, b3, b4;
while (i < len)
{
do
{
b1 = base64DecodeChars[data[i++]];
} while (i < len && b1 == -1);
if (b1 == -1)
break;
do
{
b2 = base64DecodeChars[data[i++]];
} while (i < len && b2 == -1);
if (b2 == -1)
break;
sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
do
{
b3 = data[i++];
if (b3 == 61)
return sb.toString().getBytes("iso8859-1");
b3 = base64DecodeChars[b3];
} while (i < len && b3 == -1);
if (b3 == -1)
break;
sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
do
{
b4 = data[i++];
if (b4 == 61)
return sb.toString().getBytes("iso8859-1");
b4 = base64DecodeChars[b4];
} while (i < len && b4 == -1);
if (b4 == -1)
break;
sb.append((char) (((b3 & 0x03) << 6) | b4));
}
return sb.toString().getBytes("iso8859-1");
}
}
@@ -0,0 +1,225 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.UnsupportedEncodingException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.ArrayList;
import java.util.List;
import javax.crypto.Cipher;
/**
* Created by MPC on 2017/5/24.
*/
public class Base64Utils11 {
public static final byte[] DEFAULT_SPLIT = "#PART#".getBytes(); // 当要加密的内容超过bufferSize,则采用partSplit进行分块加密
private static char[] base64EncodeChars = new char[]
{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', '+', '/' };
private static byte[] base64DecodeChars = new byte[]
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1,
-1, -1, -1 };
/**
* 加密
*
* @param data
* @return
*/
public static String encode(byte[] data)
{
StringBuffer sb = new StringBuffer();
int len = data.length;
int i = 0;
int b1, b2, b3;
while (i < len)
{
b1 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
sb.append("==");
break;
}
b2 = data[i++] & 0xff;
if (i == len)
{
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
sb.append("=");
break;
}
b3 = data[i++] & 0xff;
sb.append(base64EncodeChars[b1 >>> 2]);
sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
sb.append(base64EncodeChars[b3 & 0x3f]);
}
return sb.toString();
}
/**
* 解密
*
* @param str
* @return
*/
public static byte[] decode(String str)
{
try
{
return decodePrivate(str);
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return new byte[]
{};
}
private static byte[] decodePrivate(String str) throws UnsupportedEncodingException
{
StringBuffer sb = new StringBuffer();
byte[] data = null;
data = str.getBytes("UTF-8");
int len = data.length;
int i = 0;
int b1, b2, b3, b4;
while (i < len)
{
do
{
b1 = base64DecodeChars[data[i++]];
} while (i < len && b1 == -1);
if (b1 == -1)
break;
do
{
b2 = base64DecodeChars[data[i++]];
} while (i < len && b2 == -1);
if (b2 == -1)
break;
sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
do
{
b3 = data[i++];
if (b3 == 61)
return sb.toString().getBytes("UTF-8");
b3 = base64DecodeChars[b3];
} while (i < len && b3 == -1);
if (b3 == -1)
break;
sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
do
{
b4 = data[i++];
if (b4 == 61)
return sb.toString().getBytes("UTF-8");
b4 = base64DecodeChars[b4];
} while (i < len && b4 == -1);
if (b4 == -1)
break;
sb.append((char) (((b3 & 0x03) << 6) | b4));
}
return sb.toString().getBytes("UTF-8");
}
/**
* 使用私钥分段解密
*
*/
public static byte[] decryptByPrivateKeyForSpilt(byte[] encrypted, byte[] privateKey) throws Exception {
int splitLen = DEFAULT_SPLIT.length;
if (splitLen <= 0) {
return decryptByPrivateKey(encrypted, privateKey);
}
int dataLen = encrypted.length;
List<Byte> allBytes = new ArrayList<Byte>(1024);
int latestStartIndex = 0;
for (int i = 0; i < dataLen; i++) {
byte bt = encrypted[i];
boolean isMatchSplit = false;
if (i == dataLen - 1) {
// 到data的最后了
byte[] part = new byte[dataLen - latestStartIndex];
System.arraycopy(encrypted, latestStartIndex, part, 0, part.length);
byte[] decryptPart = decryptByPrivateKey(part, privateKey);
for (byte b : decryptPart) {
allBytes.add(b);
}
latestStartIndex = i + splitLen;
i = latestStartIndex - 1;
} else if (bt == DEFAULT_SPLIT[0]) {
// 这个是以split[0]开头
if (splitLen > 1) {
if (i + splitLen < dataLen) {
// 没有超出data的范围
for (int j = 1; j < splitLen; j++) {
if (DEFAULT_SPLIT[j] != encrypted[i + j]) {
break;
}
if (j == splitLen - 1) {
// 验证到split的最后一位,都没有break,则表明已经确认是split段
isMatchSplit = true;
}
}
}
} else {
// split只有一位,则已经匹配了
isMatchSplit = true;
}
}
if (isMatchSplit) {
byte[] part = new byte[i - latestStartIndex];
System.arraycopy(encrypted, latestStartIndex, part, 0, part.length);
byte[] decryptPart = decryptByPrivateKey(part, privateKey);
for (byte b : decryptPart) {
allBytes.add(b);
}
latestStartIndex = i + splitLen;
i = latestStartIndex - 1;
}
}
byte[] bytes = new byte[allBytes.size()];
{
int i = 0;
for (Byte b : allBytes) {
bytes[i++] = b.byteValue();
}
}
return bytes;
}
/**
* 使用私钥进行解密
*/
public static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding";//加密填充方式
public static final String RSA = "RSA";// 非对称加密密钥算法
public static byte[] decryptByPrivateKey(byte[] encrypted, byte[] privateKey) throws Exception {
// 得到私钥
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey);
KeyFactory kf = KeyFactory.getInstance(RSA,"BC");
PrivateKey keyPrivate = kf.generatePrivate(keySpec);
// 解密数据
Cipher cp = Cipher.getInstance(ECB_PKCS1_PADDING);
cp.init(Cipher.DECRYPT_MODE, keyPrivate);
byte[] arr = cp.doFinal(encrypted);
return arr;
}
}
@@ -0,0 +1,492 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Environment;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.widget.ListAdapter;
import android.widget.ListView;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor;
public class CommonUtil {
public static String FROMEXPERT="?fromtype=doctor";
public static String FROMEXPERT1="&fromtype=doctor";
public static String IS_BIG_MUDULE="is_big_module";
public static String showGuideView="show_guide_view";
public static String isNeedBlack="is_need_black";
public static Boolean BigModule()
{
return SharePrefUtil.getBoolean(UIUtils.getContext(),IS_BIG_MUDULE,false);
}
public static Boolean needshowGuideView()
{
// return SharePrefUtil.getBoolean(UIUtils.getContext(),showGuideView,true);
return false;
}
public static Boolean NeedBlack()
{
// return true;
return SharePrefUtil.getBoolean(UIUtils.getContext(),isNeedBlack,false);
}
public static Boolean showHospital()
{
return SharePrefUtil.getBoolean(UIUtils.getContext(),"net_doctor",false);
}
// public static Boolean BigModule()
// {
// return true;
// }
public static void showInfoDialog(Context context, String message) {
showInfoDialog(context, message, "提示", "确定", null);
}
public static void showInfoDialog(Context context, String message,
String titleStr, String positiveStr,
DialogInterface.OnClickListener onClickListener) {
AlertDialog.Builder localBuilder = new AlertDialog.Builder(context);
localBuilder.setTitle(titleStr);
localBuilder.setMessage(message);
if (onClickListener == null)
onClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
};
localBuilder.setPositiveButton(positiveStr, onClickListener);
localBuilder.show();
}
public static String md5(String paramString) {
String returnStr;
try {
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(paramString.getBytes());
returnStr = byteToHexString(localMessageDigest.digest());
return returnStr;
} catch (Exception e) {
return paramString;
}
}
/**
* 将指定byte数组转换成16进制字符串
*
* @param b
* @return
*/
public static String byteToHexString(byte[] b) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
hexString.append(hex.toUpperCase());
}
return hexString.toString();
}
/**
* 网络是否可用
* isNetworkAvailable
* ture OK
* @return
* boolean
*/
public static boolean isNetworkAvailable(){
if (0 == CommonUtil.isNetworkAvailable(UIUtils.getContext())) {
ToastUtil.showToast("无网络,请检查网络连接!");
return false;
}
return true;
}
/**
* 判断当前是否有可用的网络以及网络类型 0:无网络 1:WIFI 2:CMWAP 3:CMNET
*
* @param context
* @return
*/
public static int isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return 0;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
NetworkInfo netWorkInfo = info[i];
if (netWorkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return 1;
} else if (netWorkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
String extraInfo = netWorkInfo.getExtraInfo();
if ("cmwap".equalsIgnoreCase(extraInfo)
|| "cmwap:gsm".equalsIgnoreCase(extraInfo)) {
return 2;
}
return 3;
}
}
}
}
}
return 0;
}
/**
* 获取现在时间
*
* @return 返回短时间字符串格式yyyy-MM-dd HH:mm:ss
*/
public static String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("MM月dd日 HH:mm:ss");//"yyyy-MM-dd HH:mm:ss"
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
public static int getScreenPicHeight(int screenWidth, Bitmap bitmap) {
int picWidth = bitmap.getWidth();
int picHeight = bitmap.getHeight();
int picScreenHeight = 0;
picScreenHeight = (screenWidth * picHeight) / picWidth;
return picScreenHeight;
}
private static Drawable createDrawable(Drawable d, Paint p) {
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap b = bd.getBitmap();
Bitmap bitmap = Bitmap.createBitmap(bd.getIntrinsicWidth(),
bd.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(b, 0, 0, p); // 关键代码,使用新的Paint画原图,
return new BitmapDrawable(bitmap);
}
/** 设置Selector。 本次只增加点击变暗的效果,注释的代码为更多的效果 */
public static StateListDrawable createSLD(Context context, Drawable drawable) {
StateListDrawable bg = new StateListDrawable();
int brightness = 50 - 127;
ColorMatrix cMatrix = new ColorMatrix();
cMatrix.set(new float[] { 1, 0, 0, 0, brightness, 0, 1, 0, 0,
brightness,// 改变亮度
0, 0, 1, 0, brightness, 0, 0, 0, 1, 0 });
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
Drawable normal = drawable;
Drawable pressed = createDrawable(drawable, paint);
bg.addState(new int[] { android.R.attr.state_pressed, }, pressed);
bg.addState(new int[] { android.R.attr.state_focused, }, pressed);
bg.addState(new int[] { android.R.attr.state_selected }, pressed);
bg.addState(new int[] {}, normal);
return bg;
}
public static Bitmap getImageFromAssetsFile(Context ct, String fileName) {
Bitmap image = null;
AssetManager am = ct.getAssets();
try {
InputStream is = am.open(fileName);
image = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
public static <Params, Progress, Result> void executeAsyncTask(
AsyncTask<Params, Progress, Result> task, Params... params) {
if (Build.VERSION.SDK_INT >= 11) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
public static String getUploadtime(long created) {
StringBuffer when = new StringBuffer();
int difference_seconds;
int difference_minutes;
int difference_hours;
int difference_days;
int difference_months;
long curTime = System.currentTimeMillis();
difference_months = (int) (((curTime / 2592000) % 12) - ((created / 2592000) % 12));
if (difference_months > 0) {
when.append(difference_months + "月");
}
difference_days = (int) (((curTime / 86400) % 30) - ((created / 86400) % 30));
if (difference_days > 0) {
when.append(difference_days + "天");
}
difference_hours = (int) (((curTime / 3600) % 24) - ((created / 3600) % 24));
if (difference_hours > 0) {
when.append(difference_hours + "小时");
}
difference_minutes = (int) (((curTime / 60) % 60) - ((created / 60) % 60));
if (difference_minutes > 0) {
when.append(difference_minutes + "分钟");
}
difference_seconds = (int) ((curTime % 60) - (created % 60));
if (difference_seconds > 0) {
when.append(difference_seconds + "秒");
}
return when.append("前").toString();
}
public static boolean hasToken(Context ct) {
String token = SharePrefUtil.getString(ct, "token", "");
if (TextUtils.isEmpty(token)) {
return false;
} else {
return true;
}
}
public static void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0); // 计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
public static String formatDate() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return sdf.format(new Date());
}
/**
*
* @author gaofei
* @return
* @date 2015-9-8 下午4:22:04
*
* 功能说明:获得设备信息,设备类型,设备型号
*
* method
*/
public static String getDeviceInfo() {
String mobileName = "";
String mobileType = "";
try {
mobileName = Build.MANUFACTURER;
mobileType = Build.MODEL;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String deviceSpec = mobileName + " " + mobileType;
deviceSpec = deviceSpec.replaceAll("\\s*", "");
return deviceSpec;
}
private static final String SAVE_PIC_PATH = Environment
.getExternalStorageState().equalsIgnoreCase(
Environment.MEDIA_MOUNTED) ? Environment
.getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard";// 保存到SD卡
private static final String SAVE_REAL_PATH = SAVE_PIC_PATH
+ "/gdxzExpert/savePic";// 保存的确切位置
public static void saveFile(Bitmap bm, String fileName, String path)
throws IOException {
String subForder = SAVE_REAL_PATH + path;
File foder = new File(subForder);
if (!foder.exists()) {
foder.mkdirs();
}
File myCaptureFile = new File(subForder, fileName);
if (!myCaptureFile.exists()) {
myCaptureFile.createNewFile();
}
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.PNG, 100, bos);
bos.flush();
bos.close();
}
public static String saveBitmapToLocal(String outPath, Bitmap bitmap) {
try {
String imagePath = FileAccessor.getAvatarPathName() + "/"
+ outPath;//DemoUtils.md5(outPath)
File file = new File(imagePath);
if (!file.exists()) {
file.createNewFile();
}
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.PNG, 100,
bufferedOutputStream);
bufferedOutputStream.close();
LogUtil.d("photo image from data, path:" + imagePath);
return imagePath;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
// Uri uri = Uri.fromFile(file);
// intent.setData(uri);
// context.sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!,记得要传你更新的file哦
/**
*
* ToDBC
* 将textview中的字符全角化。即将所有的数字、字母及标点全部转为全角字符,使它们与汉字同占两个字节,
* 这样就可以避免由于占位导致的排版混乱问题了。 半角转为全角的代码如下,只需调用即可。
* @param input
* @return
* String
*/
public static String ToDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i< c.length; i++) {
if (c[i] == 12288) {
c[i] = (char) 32;
continue;
}if (c[i]> 65280&& c[i]< 65375)
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
/**
* 获取年
* @return
*/
public static int getYear(){
Calendar cd = Calendar.getInstance();
return cd.get(Calendar.YEAR);
}
/**
* 获取月
* @return
*/
public static int getMonth(){
Calendar cd = Calendar.getInstance();
return cd.get(Calendar.MONTH)+1;
}
/**
*
* 方法描述 隐藏手机号中间位置字符,显示前三后三个字符
*/
public static String hidePhoneNo(String phoneNo) {
int length = phoneNo.length();
int beforeLength = 3;
int afterLength = 4;
//替换字符串,当前使用“*”
String replaceSymbol = "*";
StringBuffer sb = new StringBuffer();
for(int i=0; i<length; i++) {
if(i < beforeLength || i >= (length - afterLength)) {
sb.append(phoneNo.charAt(i));
} else {
sb.append(replaceSymbol);
}
}
return sb.toString();
}
public static void setCookie(String url) {
CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.removeSessionCookies(null);
cookieManager.flush();
} else {
cookieManager.removeSessionCookie();
CookieSyncManager.getInstance().sync();
}
cookieManager.setAcceptCookie(true);
cookieManager.setCookie(url, "hcp_from=expert_app");
cookieManager.setCookie(url, "hcp_token="+SharePrefUtil.getString(UIUtils.getContext(),"hcp_token",""));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.flush();
} else {
CookieSyncManager.getInstance().sync();
}
}
}
@@ -0,0 +1,146 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.File;
import java.io.IOException;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
/**
* 缓存工具类
* @author naibo-liao
* @时间: 2013-1-4下午02:30:52
*/
public class ConfigCacheUtil {
private static final String TAG=ConfigCacheUtil.class.getName();
/** 1秒超时时间 */
public static final int CONFIG_CACHE_SHORT_TIMEOUT=1000 * 60 * 5; // 5 分钟
/** 5分钟超时时间 */
public static final int CONFIG_CACHE_MEDIUM_TIMEOUT=1000 * 3600 * 2; // 2小时
/** 中长缓存时间 */
public static final int CONFIG_CACHE_ML_TIMEOUT=1000 * 60 * 60 * 24 * 1; // 1天
/** 最大缓存时间 */
public static final int CONFIG_CACHE_MAX_TIMEOUT=1000 * 60 * 60 * 24 * 7; // 7天
/**
* CONFIG_CACHE_MODEL_LONG : 长时间(7天)缓存模式 <br>
* CONFIG_CACHE_MODEL_ML : 中长时间(12小时)缓存模式<br>
* CONFIG_CACHE_MODEL_MEDIUM: 中等时间(2小时)缓存模式 <br>
* CONFIG_CACHE_MODEL_SHORT : 短时间(5分钟)缓存模式
*/
public enum ConfigCacheModel {
CONFIG_CACHE_MODEL_SHORT, CONFIG_CACHE_MODEL_MEDIUM, CONFIG_CACHE_MODEL_ML, CONFIG_CACHE_MODEL_LONG;
}
/**
* 获取缓存
* @param url 访问网络的URL
* @return 缓存数据
*/
public static String getUrlCache(String url, ConfigCacheModel model,Context context) {
if(url == null) {
return null;
}
String result=null;
String path=Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt";
File file=new File(path);
if(file.exists() && file.isFile()) {
long expiredTime=System.currentTimeMillis() - file.lastModified();
Log.d(TAG, file.getAbsolutePath() + " expiredTime:" + expiredTime / 60000 + "min");
// 1。如果系统时间是不正确的
// 2。当网络是无效的,你只能读缓存
if(UIUtils.isNetWorkConnected(context)) {
if(expiredTime < 0) {
return null;
}
if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT) {
if(expiredTime > CONFIG_CACHE_SHORT_TIMEOUT) {
return null;
}
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_MEDIUM) {
if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) {
return null;
}
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_ML) {
if(expiredTime > CONFIG_CACHE_ML_TIMEOUT) {
return null;
}
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_LONG) {
if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) {
return null;
}
} else {
if(expiredTime > CONFIG_CACHE_MAX_TIMEOUT) {
return null;
}
}
}
try {
result=FileUtils.readTextFile(file);
} catch(IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* 设置缓存
* @param data
* @param url
*/
public static void setUrlCache(String data, String url) {
if(Constant.ENVIROMENT_DIR_CACHE == null) {
return;
}
File dir=new File(Constant.ENVIROMENT_DIR_CACHE);
if(!dir.exists() && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
dir.mkdirs();
}
File file=new File(Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt");
try {
// 创建缓存数据到磁盘,就是创建文件
FileUtils.writeTextFile(file, data);
} catch(IOException e) {
Log.d(TAG, "write " + file.getAbsolutePath() + " data failed!");
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* 删除历史缓存文件
* @param cacheFile
*/
public static void clearCache(File cacheFile) {
if(cacheFile == null) {
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
try {
File cacheDir=new File(Environment.getExternalStorageDirectory().getPath() + "/gdxz/cache/");
if(cacheDir.exists()) {
clearCache(cacheDir);
}
} catch(Exception e) {
e.printStackTrace();
}
}
} else if(cacheFile.isFile()) {
cacheFile.delete();
} else if(cacheFile.isDirectory()) {
File[] childFiles=cacheFile.listFiles();
for(int i=0; i < childFiles.length; i++) {
clearCache(childFiles[i]);
}
}
}
}
@@ -0,0 +1,216 @@
package cn.shangyu.gdxzExpert.utils;
import android.os.Environment;
/**
*
* Constant.java
*
* @author gaofei
* @date 2015-8-31 上午9:55:00 Copyright (C) 2015 河南商宇科技有限公司
*
* 功能说明:存放变量的工具类
*/
public class Constant {
public static String SP_NAME = "gdxz_config";// sp文件名
public static String SP_IS_FIRST_NAME = "IS_OPEN_MAIN_PAGER";// 是否第一次使用APP的sp文件名
public static String IS_LOGIN = "isLogin";// 是否登录
public static String Patient_AppKey = "aaf98f89516bf50b015174e9d5ea1110#";// 容联AppKey
public static String AppKey = "8a48b5514fba2f87014fca72dec021e4";// 容联AppKey
public static String AppToken = "e470a37c8561ea899cb78b712ffec2e3";// 容联AppToken
public static String SystemID = "f81e64e19fd54525be857aa49c724582";// 系统推送账号id
public static String YanzhengID = "a46c069b8179419db8d9aac07550dafb";// 验证消息推送账号id
public static String OrderID = "3219a37e63f14ebfae586de7676ab550";// 订单消息推送账号id
public static String PayId="1281030301";//微信支付商户号
public static String WeId ="wxbf3658f5e674667c";//微信id
public static Boolean WePayed =false;//微信是否支付成功
public static String PatientApplyID = "8f144d2f8f8b4e9484869492a7567ce4";// 随访消息推送账号id
public static String PublicID = "c4957541a3294caebf298f235cfe106d";// 公益消息推送账号id
public static String TYPE_ONE = "1";// 专家同意患者的随访申请
public static String TYPE_TWO = "2";// 专家拒绝患者的随访申请
public static String TYPE_THREE = "3";// 专家抢答成功公益咨询
public static String TYPE_FOUR = "4";// 专家解除患者的随访关系
public static String TYPE_FIVE = "5";// 患者解除专家的随访关系
public static String TYPE_SIX = "6";// 订单消息
public static String TYPE_SEVEN = "7";// 系统消息
public static String TYPE_EIGHT = "8";// 患者申请随访患者
public static String TYPE_LOGOUT = "33";// 删除账号
public static boolean isShareGetPoint = false;// 分享是否得分
//帐号igandan.com密码igandan.org
public static String YKToken = "FcUQbuw4CccahV3fK26CvDFfXM-_72B45slMKj2lLy4";// 医库Token
public static String NOFIFICATION_TYPE = "Kickoff_pushcontent_notification";// 容联推送的类型,一般为离线登录
/**
* 聊天类型,患者
*/
public static String typePatient = "Patient";// 聊天类型,患者
/**
* 聊天类型,公益咨询
*/
public static String typeConsult = "Consult";// 聊天类型,公益咨询
/**
* 聊天类型,即是患者也是公益咨询
*/
public static String typePatientConsult = "PatientConsult";// 聊天类型,公益咨询
/**
* 聊天类型,朋友圈里
*/
public static String typeFriends = "Friends";// 聊天类型,朋友圈里
/**
* 聊天类型,朋友圈里
*/
public static String typeVip = "Vip";// 聊天类型,朋友圈里
/**
* 专家uuid,即我的uuid
*/
public static String uuid = "uuid";
/**
* 万方用户名
*/
public static String WFUserName = "iGandan";
/**
* 万方密码
*/
public static String WFPassWord = "gdxz67571131";
/**
* 万方token
*/
public static String WFToken = "iGandan";
/**
* 万方key
*/
public static String WFKey = "iGandan201807130";
/**
* 万方type
*/
public static String WFtype = "WF_QK";
/**
* 专家uuid,即我的uuid,也是聊天的id
*/
public static String USERID = "USERID";
/**
* 专家的头像,既是我的头像,在登录,修改资料时候保存到sp
*/
public static String photo = "photo";
/**
* 专家的的真实姓名,既是我的姓名,在登录,修改资料时候保存到sp
*/
public static String realName = "realName";
/**
* 专家的的手机号,既是我的手机号,在登录,修改资料时候保存到sp
*/
public static String mobile = "mobile";
/**
* 云信
*/
public static String yx_accid = "YX_ACCID";
public static String yx_token = "YX_TOKEN";
//聊天类型普通聊天与公益咨询
public static String general = "general";
public static String consult = "consult";
/**
* 聊天类型,系通知
*/
public static String typeSystem = "System";
// 读过的新闻id数组
public final static String READ_NEWS_ID_ARRAY_KEY = "read_news_id_array";
// 读过的系统消息id数组
public final static String READ_MSG_ID_ARRAY_KEY = "read_msg_id_array";
/**
* 选择银行卡数值
*/
public final static int SELECT_BANK_CARD = 500;
/**
* 去提现数值
*/
public final static int DRAW_WITH_CODE = 501;
/**
* 科普投稿
*/
public final static int CONTRIBUTE_CODE = 502;
/**
* 科普投稿
*/
public final static int CONTRIBUTE_CODE2 = 5022;
/**
* 爱心捐助->我要捐助
*/
public final static int DONATE_CODE = 503;
/**
* 个人资料—>修改头像
*/
public final static int INFO_CODE = 504;
public static String ORDER_DATA = "order_data";
public static boolean isRefreshpoint = true;
public static int pointnum = 0;
;
// 百度定位中sp设置
public static final String LON = "lon";// 百度定位经度
public static final String LAT = "lat";// 维度
public static final String PROVINCE = "province";// 省
public static final String CITY = "city";// 市
public static final String DISTRICT = "district";// 区
public static final String CITYCODE = "citycode";// 城市id
/**
* 公益咨询uuid
*/
public static final String PublicServiceUuid = "PublicServiceUuid";// 城市id
/**
* 表示抢答了公益咨询
*/
public static final int openPublicService = -1;
/**
* 友盟分享
*/
public static final String DESCRIPTOR = "com.umeng.share";
public static final String ENVIROMENT_DIR_CACHE = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
public static boolean isSignIn;//是否签到
public static String isNotification = "isNotification";//是否打开通知栏
public static String isdown = "";//是否存在下载课件任务,"":说明重新启动 0:无下载任务 1:有下载任务
public static int fragmentHeight1;
public static int fragmentHeight2;
public static int fragmentHeight3;
public static int isMaiLanExpert;//是否是迈兰医生1:是 0:不是
public static int HERO2019;//是否开启英雄榜
public static String HERO2019url_path;//是否开启英雄榜
public static String regID;//小米推送服务返回regid作为容联的
public static String token;//华为推送服务返回作为容联的
public static int from;//赠书活动
public static String url_path;//赠书活动
public static String zengshuName;//赠书活动
public static String Img;//赠书活动
public static int islogout = 2;
public static int IV_5ZHE;
// public static String Changjianwenti = "http://wx.igandan.com/changjianwenti.jsp?share=1" ;//常见问题
// public static final String Changjianwenti = "http://wx.igandan.com/QaA/toindex?share=1" ;//常见问题
public static String Changjianwenti = "https://wx.igandan.com/wxPatient/index.htm#/problem?link=share";//常见问题
public static final String POLVID = "PolvId";// 观众id
public static String OldfilePath = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/gdxzExpert/download";//Android11以前期刊杂志的下载路径
public static final String ShowMagazine = "ShowMagazine";
public static String Report_userId="";
public static String Repotr_token="";
public static String Repotr_app_key="";
//uniapp小程序appid
public static String uniapp_mp_appid="__UNI__89F511F";
}
@@ -0,0 +1,35 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.widget.TextView;
import static android.content.Context.CLIPBOARD_SERVICE;
/**
* Created by WANGChengXin on 2020/1/14.
*/
public class CopyButtonLibrary {
private ClipboardManager myClipboard;
private ClipData myClip;
private Context context;
private TextView textView;
public CopyButtonLibrary(Context context, TextView textView) {
this.context = context;
this.textView = textView;
}
public void init() {
myClipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
String text;
text = textView.getText().toString();
myClip = ClipData.newPlainText("text", text);
myClipboard.setPrimaryClip(myClip);
ToastUtil.showMessage("复制成功");
}
}
@@ -0,0 +1,417 @@
package cn.shangyu.gdxzExpert.utils;
import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build;
import android.os.Environment;
import android.text.format.Time;
import android.util.Log;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor;
import cn.shangyu.gdxzExpert.http.HttpHelper;
/**
* ClassName: CrashHandler
* Function: UncaughtException处理类,当程序发生Uncaught异常的时候,由该类来接管程序,并记录发送错误报告.
* @author Norris Norris.sly@gmail.com
* @version
* @since Ver 1.0 I used to be a programmer like you, then I took an arrow in the knee
* @Date 2013 2013-3-24 下午12:27:10
* @see
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* @Fields
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* @Methods
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* 2013-3-24下午12:27:10 Modified By Norris
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
*/
public class CrashHandler implements UncaughtExceptionHandler {
/**
* Log日志的tag
* String : TAG
* @since 2013-3-21下午8:44:28
*/
private static final String TAG = "NorrisInfo" ;
/**
* 系统默认的UncaughtException处理类
* Thread.UncaughtExceptionHandler : mDefaultHandler
* @since 2013-3-21下午8:44:43
*/
private UncaughtExceptionHandler mDefaultHandler ;
/**
* CrashHandler实例
* CrashHandler : mInstance
* @since 2013-3-21下午8:44:53
*/
private static CrashHandler mInstance = new CrashHandler() ;
/**
* 程序的Context对象
* Context : mContext
* @since 2013-3-21下午8:45:02
*/
private Context mContext ;
/**
* 用来存储设备信息和异常信息
* Map<String,String> : mLogInfo
* @since 2013-3-21下午8:46:15
*/
private Map<String , String> mLogInfo = new HashMap<String , String>() ;
/**
* 用于格式化日期,作为日志文件名的一部分(FIXME 注意在windows下文件名无法使用:等符号!)
* SimpleDateFormat : mSimpleDateFormat
* @since 2013-3-21下午8:46:39
*/
private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyyMMdd_HH-mm-ss") ;
/** 错误报告文件的扩展名 */
private static final String CRASH_REPORTER_EXTENSION = ".log";
/**
* Creates a new instance of CrashHandler.
*/
private CrashHandler() {
}
/**
* getInstance:{获取CrashHandler实例 ,单例模式 }
* ──────────────────────────────────
* @return CrashHandler
* @throws
* @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* 2013-3-21下午8:52:24 Modified By Norris
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
*/
public static CrashHandler getInstance() {
return mInstance ;
}
/**
* init:{初始化}
* ──────────────────────────────────
* @param paramContext
* @return void
* @throws
* @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* 2013-3-21下午8:52:45 Modified By Norris
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
*/
public void init(Context paramContext) {
mContext = paramContext ;
// 获取系统默认的UncaughtException处理器
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler() ;
// 设置该CrashHandler为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(this) ;
}
/**
* 当UncaughtException发生时会转入该重写的方法来处理
* (non-Javadoc)
* @see UncaughtExceptionHandler#uncaughtException(Thread, Throwable)
*/
public void uncaughtException(Thread paramThread , Throwable paramThrowable) {
if( ! handleException(paramThrowable) && mDefaultHandler != null) {
// 如果自定义的没有处理则让系统默认的异常处理器来处理
mDefaultHandler.uncaughtException(paramThread , paramThrowable) ;
}
else {
try {
// 如果处理了,让程序继续运行1秒再退出,保证文件保存并上传到服务器
Thread.sleep(1000) ;
}
catch(InterruptedException e) {
e.printStackTrace() ;
}
// 退出程序
android.os.Process.killProcess(android.os.Process.myPid()) ;
System.exit(1) ;
}
}
/**
* handleException:{自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.}
* ──────────────────────────────────
* @param paramThrowable
* @return true:如果处理了该异常信息;否则返回false.
* @throws
* @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* 2013-3-24下午12:28:53 Modified By Norris
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
*/
public boolean handleException(Throwable paramThrowable) {
if(paramThrowable == null)
return false ;
// new Thread() {
// public void run() {
// Looper.prepare() ;
// Toast.makeText(mContext , "很抱歉,程序出现异常,即将退出" , Toast.LENGTH_SHORT).show() ;
// Looper.loop() ;
// }
// }.start() ;
// 获取设备参数信息
// getDeviceInfo(mContext) ;
// 保存日志文件
saveCrashLogToFile(paramThrowable) ;
return true ;
}
/**
* getDeviceInfo:{获取设备参数信息}
* ──────────────────────────────────
* @param paramContext
* @throws
* @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* 2013-3-24下午12:30:02 Modified By Norris
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
*/
public void getDeviceInfo(Context paramContext) {
try {
// 获得包管理器
PackageManager mPackageManager = paramContext.getPackageManager() ;
// 得到该应用的信息,即主Activity
PackageInfo mPackageInfo = mPackageManager.getPackageInfo(
paramContext.getPackageName() , PackageManager.GET_ACTIVITIES) ;
if(mPackageInfo != null) {
String versionName = mPackageInfo.versionName == null ? "null"
: mPackageInfo.versionName ;
String versionCode = mPackageInfo.versionCode + "" ;
mLogInfo.put("versionName" , versionName) ;
mLogInfo.put("versionCode" , versionCode) ;
}
}
catch(NameNotFoundException e) {
e.printStackTrace() ;
}
// 反射机制
Field[] mFields = Build.class.getDeclaredFields() ;
// 迭代Build的字段key-value 此处的信息主要是为了在服务器端手机各种版本手机报错的原因
for(Field field : mFields) {
try {
field.setAccessible(true) ;
mLogInfo.put(field.getName() , field.get("").toString()) ;
Log.d(TAG , field.getName() + ":" + field.get("")) ;
}
catch(IllegalArgumentException e) {
e.printStackTrace() ;
}
catch(IllegalAccessException e) {
e.printStackTrace() ;
}
}
}
/**
* saveCrashLogToFile:{将崩溃的Log保存到本地}
* TODO 可拓展,将Log上传至指定服务器路径
* ──────────────────────────────────
* @param paramThrowable
* @return FileName
* @throws
* @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
* 2013-3-24下午12:31:01 Modified By Norris
* ──────────────────────────────────────────────────────────────────────────────────────────────────────
*/
private void saveCrashLogToFile(Throwable paramThrowable) {
StringBuffer mStringBuffer = new StringBuffer() ;
for(Map.Entry<String , String> entry : mLogInfo.entrySet()) {
String key = entry.getKey() ;
String value = entry.getValue() ;
mStringBuffer.append(key + "=" + value + "\r\n") ;
}
Writer mWriter = new StringWriter() ;
PrintWriter mPrintWriter = new PrintWriter(mWriter) ;
paramThrowable.printStackTrace(mPrintWriter) ;
paramThrowable.printStackTrace();
Throwable mThrowable = paramThrowable.getCause() ;
// 迭代栈队列把所有的异常信息写入writer中
while(mThrowable != null) {
mThrowable.printStackTrace(mPrintWriter) ;
// 换行 每个个异常栈之间换行
mPrintWriter.append("\r\n") ;
mThrowable = mThrowable.getCause() ;
}
//记得关闭
mPrintWriter.close() ;
String mResult = mWriter.toString() ;
mStringBuffer.append(mResult) ;
// 保存文件,设置文件名
// String mTime = mSimpleDateFormat.format(new Date()) ;
// final String mFileName = "CrashLog-" + mTime + ".log" ;
try {
Time t = new Time("GMT+8");
t.setToNow(); // 取得系统时间
int date = t.year * 10000 + t.month * 100 + t.monthDay;
int time = t.hour * 10000 + t.minute * 100 + t.second;
String mFileName = "gdxzExpert-crash-" + date + "-" + time + CRASH_REPORTER_EXTENSION;
final String path;
if (FileAccessor.isExistExternalStore()) {
path =getContext().getExternalFilesDir("") + "/gdxzExpert/CrashLogs";
} else{
path ="/gdxzExpert/crash";
}
final File mDirectory = new File(path) ;
if( ! mDirectory.exists()){
mDirectory.mkdir() ;
}
FileOutputStream mFileOutputStream = new FileOutputStream(new File(mDirectory , mFileName),true);
// FileOutputStream mFileOutputStream = new FileOutputStream(mDirectory + "/" + mFileName) ;
mFileOutputStream.write(mStringBuffer.toString().getBytes()) ;
mFileOutputStream.close() ;
}
catch(FileNotFoundException e) {
e.printStackTrace() ;
}
catch(IOException e) {
e.printStackTrace() ;
}
// return null ;
}
/**
* 在程序启动时候, 可以调用该函数来发送以前没有发送的报告
*/
public void sendPreviousReportsToServer() {
sendCrashReportsToServer(mContext);
}
/**
* 把错误报告发送给服务器,包含新产生的和以前没发送的.
*
* @param ctx
*/
private void sendCrashReportsToServer(Context ctx) {
String[] crFiles = getCrashReportFiles(ctx);
if (crFiles != null && crFiles.length > 0) {
TreeSet<String> sortedFiles = new TreeSet<String>();
sortedFiles.addAll(Arrays.asList(crFiles));
for (String fileName : sortedFiles) {
File cr = new File(ctx.getFilesDir(), fileName);
postReport(cr);
cr.delete();// 删除已发送的报告
}
}
}
/**
* 获取错误报告文件名
*
* @param ctx
* @return
*/
private String[] getCrashReportFiles(Context ctx) {
File filesDir = ctx.getFilesDir();
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(CRASH_REPORTER_EXTENSION);
}
};
return filesDir.list(filter);
}
private void postReport(final File file) {
// TODO 发送错误报告到服务器
final String url=Url.CrashUpload;
//实例化RequestParams对象
// RequestParams params=new RequestParams();
// params.addBodyParameter(file.getPath().replace("/", ""), file);
// uploadMethod(params,url);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
upLoad(url, file);
}
}).start();
}
/**
* 上传log日志
* @param file
* @param url
*/
private void upLoad(String urlLoad, File mDirectory) {
// TODO Auto-generated method stub
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// String path = Environment.getExternalStorageDirectory()+ "/CrashLogs/CrashLog.log";
// File mDirectory = new File(path) ;
if(mDirectory.exists()){
String str = urlLoad;
try {
URL url = new URL(str);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("content-type", "text/html");
BufferedOutputStream out=new BufferedOutputStream(connection.getOutputStream());
//读取文件上传到服务器
FileInputStream fileInputStream=new FileInputStream(mDirectory);
byte[]bytes=new byte[1024];
int numReadByte=0;
while((numReadByte=fileInputStream.read(bytes,0,1024))>0){
out.write(bytes, 0, numReadByte);
}
out.flush();
fileInputStream.close();
//读取URLConnection的响应
DataInputStream in=new DataInputStream(connection.getInputStream());
mDirectory.delete();
} catch (Exception e) {
e.printStackTrace();
}
}else{
}
}
}
private void uploadMethod(RequestParams params, String url) {
// TODO Auto-generated method stub
HttpHelper.loadData(HttpRequest.HttpMethod.POST, url, params,new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
// ToastUtil.showMessage("上传成功");
Log.i("CrashHandler", "====upload_success=====" + responseInfo.result);
}
@Override
public void onFailure(HttpException error, String msg) {
// ToastUtil.showMessage("上传失败");
Log.i("CrashHandler", error.getExceptionCode() + "====upload_error====" + msg);
}
});
}
}
@@ -0,0 +1,257 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import com.nostra13.universalimageloader.utils.StorageUtils;
import java.io.File;
import java.math.BigDecimal;
import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager;
public class DataCleanManager {
public static String getTotalCacheSize(Context context) throws Exception {
long cacheSize = getFolderSize(context.getCacheDir());
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
cacheSize += getFolderSize(context.getExternalCacheDir());
// File cacheDir = StorageUtils.getOwnCacheDirectory(context, "gdxzExpert/image");
// LogUtil.i("cacheDir =="+cacheDir);
File cacheDir = new File("/data/data/"
+ context.getPackageName() + "/app_webview/Cache");
cacheSize += getFolderSize(cacheDir);
}
return getFormatSize(cacheSize);
}
public static void clearAllCache(Context context) {
deleteDir(context.getCacheDir());
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
cleanWebCache(context);
// cleanCustomCacheImage(context);
}
}
private static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}else {
Log.i("TAG","flag = "+"文件不存在");
}
return dir.delete();
}
/**
* * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * *
*
* @param context
*/
public static void cleanInternalCache(Context context) {
boolean flag = deleteDir(context.getCacheDir());
}
/**
* * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * *
*
* @param context
*/
public static void cleanDatabases(Context context) {
deleteDir(new File("/data/data/"
+ context.getPackageName() + "/databases"));
}
/**
* * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * *
*
* @param context
*/
public static void cleanWebCache(Context context) {
deleteDir(new File("/data/data/" + context.getPackageName() + "/app_webview"));
}
/**
* * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) *
*
* @param context
*/
public static void cleanSharedPreference(Context context) {
/** 删除SharedPreferences文件 **/
SharePrefUtil.clear(context);
File file = new File("/data/data/"
+ context.getPackageName() + "/shared_prefs", Constant.SP_NAME);
deleteDir(file);
// deleteDir(new File("/data/data/"
// + context.getPackageName() + "/shared_prefs"));
}
/**
* * 清除本应用自定义的数据库文件 *
*
* @param context
*/
public static void cleanCustomDatabases(Context context) {
deleteDir(new File("/data/data/"
+ context.getPackageName() + "/ECSDK_Msg"));
}
/**
* * 清除本应用自定义image *
*
* @param context
*/
public static void cleanCustomCacheImage(Context context) {
File cacheDir = StorageUtils.getOwnCacheDirectory(context, "gdxzExpert/image");
deleteDir(cacheDir);
}
/**
* * 按名字清除本应用数据库 * *
*
* @param context
* @param dbName
*/
public static void cleanDatabaseByName(Context context, String dbName) {
context.deleteDatabase(dbName);
}
/**
* * 清除/data/data/com.xxx.xxx/files下的内容 * *
*
* @param context
*/
public static void cleanFiles(Context context) {
deleteDir(context.getFilesDir());
}
/**
* * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache)
*
* @param context
*/
public static void cleanExternalCache(Context context) {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}
/**
* * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * *
*
* @param filePath
* */
public static void cleanCustomCache(String filePath) {
deleteDir(new File(filePath));
}
/**
* * 清除本应用所有的数据 * *
*
* @param context
* @param filepath
*/
public static void cleanApplicationData(Context context, String... filepath) {
PatientSqlManager.delAllPatientInfo(Constant.typePatient);
cleanSharedPreference(context);
cleanInternalCache(context);
cleanExternalCache(context);
cleanWebCache(context);
// cleanDatabases(context);//不可打开。此会清除掉用户下载记录。需要保留。
cleanCustomCacheImage(context);
cleanCustomDatabases(context);
cleanFiles(context);
if (filepath == null) {
return;
}
for (String filePath : filepath) {
cleanCustomCache(filePath);
}
}
/**
* * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * *
*
* @param
*/
/*private static void deleteFilesByDirectory(File directory) {
if (directory != null && directory.exists() && directory.isDirectory()) {
for (File item : directory.listFiles()) {
item.delete();
}
}
}*/
// 获取文件
// Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/
// 目录,一般放一些长时间保存的数据
// Context.getExternalCacheDir() -->
// SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
public static long getFolderSize(File file) throws Exception {
long size = 0;
try {
File[] fileList = file.listFiles();
if (fileList != null) {
for (int i = 0; i < fileList.length; i++) {
// 如果下面还有文件
if (fileList[i].isDirectory()) {
size = size + getFolderSize(fileList[i]);
} else {
size = size + fileList[i].length();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return size;
}
/**
* 格式化单位
*
* @param size
* @return
*/
public static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
// return size + "Byte";
return "0KB";
}
double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "KB";
}
double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "MB";
}
double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "GB";
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
+ "TB";
}
}
@@ -0,0 +1,37 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.Calendar;
import java.util.Date;
/**
* Created by wangchengxin on 2019/7/2.
*/
public class DateGetAge {
public static int getAge(Date birthDay)throws Exception {
Calendar cal = Calendar.getInstance();
if(cal.before(birthDay)){
throw new IllegalArgumentException("The birthDay is before Now.It's unbelievable!");
}
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH);
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDay);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH);
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirth;
if(monthNow <= monthBirth) {
if(monthNow == monthBirth){
if(dayOfMonthNow < dayOfMonthBirth)
age--;
}
else{
age--;
}
}
return age;
}
}
@@ -0,0 +1,562 @@
/**
* 用一句话描述该文件做什么.
* @title DateUtil.java
* @package com.sinsoft.android.util
* @author shimiso
* @update 2012-6-26 上午9:57:56
*/
package cn.shangyu.gdxzExpert.utils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
/**
* 日期操作工具类.
*
* @author shimiso
*/
public class DateUtil {
private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
public static Date str2Date(String str) {
return str2Date(str, null);
}
public static Date str2Date(String str, String format) {
if (str == null || str.length() == 0) {
return null;
}
if (format == null || format.length() == 0) {
format = FORMAT;
}
Date date = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
date = sdf.parse(str);
} catch (Exception e) {
e.printStackTrace();
}
return date;
}
public static Calendar str2Calendar(String str) {
return str2Calendar(str, null);
}
public static Calendar str2Calendar(String str, String format) {
Date date = str2Date(str, format);
if (date == null) {
return null;
}
Calendar c = Calendar.getInstance();
c.setTime(date);
return c;
}
public static String date2Str(Calendar c) {// yyyy-MM-dd HH:mm:ss
return date2Str(c, null);
}
public static String date2Str(Calendar c, String format) {
if (c == null) {
return null;
}
return date2Str(c.getTime(), format);
}
public static String date2Str(Date d) {// yyyy-MM-dd HH:mm:ss
return date2Str(d, null);
}
public static String date2Str(Date d, String format) {// yyyy-MM-dd HH:mm:ss
if (d == null) {
return null;
}
if (format == null || format.length() == 0) {
format = FORMAT;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s = sdf.format(d);
return s;
}
public static String getCurDateStr() {
Calendar c = Calendar.getInstance();
c.setTime(new Date());
return c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-"
+ c.get(Calendar.DAY_OF_MONTH) + " "
+ c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE)
+ ":" + c.get(Calendar.SECOND);
}
/**
* 获得当前日期的字符串格式
*
* @param format
* @return
*/
public static String getCurDateStr(String format) {
Calendar c = Calendar.getInstance();
return date2Str(c, format);
}
// 格式到秒
public static String getMillon(long time) {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time);
}
public static int[] getTimeSpan(String begintime,String endtime)
{
int[]time={0,0,0,0};
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = null;//后的时间
try {
d1 = format.parse(endtime);
Date d2 = format.parse(begintime); //前的时间
Long diff = d1.getTime() - d2.getTime(); //两时间差,精确到毫秒
int day = (int) (diff / (1000 * 60 * 60 * 24)); //以天数为单位取整
int hour= (int) (diff/(60*60*1000)-day*24); //以小时为单位取整
int min= (int) ((diff/(60*1000))-day*24*60-hour*60); //以分钟为单位取整
int second= (int) (diff/1000-day*24*60*60-hour*60*60-min*60);//秒
time[0]=day;
time[1]=hour;
time[2]=min;
time[3]=second;
} catch (ParseException e) {
e.printStackTrace();
}
return time;
};
/*
* 将10 or 13 位时间戳转为时间字符串
* convert the number 1407449951 1407499055617 to date/time format timestamp
*/
public static String timestamp2Date(String str_num,String format ) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
if (str_num.length() == 13) {
String date = sdf.format(new Date(Long.parseLong(str_num)));
LogUtil.i("timestamp2Date"+ "将13位时间戳:" + str_num + "转化为字符串:", date);
return date;
} else {
String date = sdf.format(new Date(Long.parseLong(str_num) * 1000L));
LogUtil.i("timestamp2Date" + "将10位时间戳:" + str_num + "转化为字符串:", date);
return date;
}
}
/**
* 10位int型的时间戳转换为String(yyyy-MM-dd HH:mm:ss)
* @param time
* @return
*/
public static String timestampToString(Integer time){
//int转long时,先进行转型再进行计算,否则会是计算结束后在转型
long temp = (long)time*1000;
Timestamp ts = new Timestamp(temp);
String tsStr = "";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
//方法一
tsStr = dateFormat.format(ts);
System.out.println(tsStr);
} catch (Exception e) {
e.printStackTrace();
}
return tsStr;
}
// 格式到天
public static String getDay(long time) {
return new SimpleDateFormat("yyyy-MM-dd").format(time);
}
// 格式到毫秒
public static String getSMillon(long time) {
return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS").format(time);
}
public static List<String> getDataList() {
Calendar calendar = new GregorianCalendar();
Date date = new Date();
ArrayList<String> dataList = new ArrayList<String>();
for (int i = 0; i < 7; i++) {
calendar.setTime(date);
if (i == 0) {
calendar.add(Calendar.DATE, 0);
}else{
calendar.add(Calendar.DATE, 1);
}
// 把日期往后增加一天.整数往后推,负数往前移动
date = calendar.getTime();
String strDate = DateUtil.date2Str(date, "MM月dd日");
String mWay = String.valueOf(calendar.get(Calendar.DAY_OF_WEEK));
String mW = "";
if("1".equals(mWay)){
mW ="日";
}else if("2".equals(mWay)){
mW ="一";
}else if("3".equals(mWay)){
mW ="二";
}else if("4".equals(mWay)){
mW ="三";
}else if("5".equals(mWay)){
mW ="四";
}else if("6".equals(mWay)){
mW ="五";
}else if("7".equals(mWay)){
mW ="六";
}
dataList.add(mWay+strDate + " 星期" + mW);
}
return dataList;
}
public static List<String> getDataListTwo() {
Calendar calendar = new GregorianCalendar();
Date date = new Date();
ArrayList<String> dataList = new ArrayList<String>();
for (int i = 0; i < 7; i++) {
calendar.setTime(date);
if (i == 0) {
calendar.add(Calendar.DATE, 0);
}else{
calendar.add(Calendar.DATE, 1);
}
// 把日期往后增加一天.整数往后推,负数往前移动
date = calendar.getTime();
String strDate = DateUtil.date2Str(date, "yyyy-MM-dd");
dataList.add(strDate);
}
return dataList;
}
private static String mYear;
private static String mMonth;
private static String mDay;
private static String mWay;
public static String StringData(Date date){
final Calendar c = Calendar.getInstance();
// c.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
c.setTime(date);
mYear = String.valueOf(c.get(Calendar.YEAR)); // 获取当前年份
mMonth = String.valueOf(c.get(Calendar.MONTH) + 1);// 获取当前月份
mDay = String.valueOf(c.get(Calendar.DAY_OF_MONTH));// 获取当前月份的日期号码
mWay = String.valueOf(c.get(Calendar.DAY_OF_WEEK));
if("1".equals(mWay)){
mWay ="日";
}else if("2".equals(mWay)){
mWay ="一";
}else if("3".equals(mWay)){
mWay ="二";
}else if("4".equals(mWay)){
mWay ="三";
}else if("5".equals(mWay)){
mWay ="四";
}else if("6".equals(mWay)){
mWay ="五";
}else if("7".equals(mWay)){
mWay ="六";
}
return mYear + "年" + mMonth + "月" + mDay+"日"+" 周"+mWay;
}
public static String gettimeBydate(String birthday,String basdate) {
if (basdate==null||basdate.length() <10)
{
return "";
}
if (birthday.length() > 10) {
birthday = birthday.substring(0, 10);
}
if (basdate.length() > 10) {
basdate = basdate.substring(0, 10);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
Date basedate = null;
try {
date = sdf.parse(birthday);
basedate = sdf.parse(basdate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
if (cal.before(date)) {
throw new IllegalArgumentException(
"The birthDay is before Now.It's unbelievable!");
}
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
cal.setTime(basedate);
int yearbase = cal.get(Calendar.YEAR);
int monthbase = cal.get(Calendar.MONTH) + 1;
double y=0,m=0;
if(monthbase> month)
{
y=year-yearbase-1;
m=(12+month-monthbase)/12.00;
}
else
{
y=year-yearbase;
m=(month-monthbase)/12.00;
}
// if(month> DateEntity.today().getMonth())
// {
// y=DateEntity.today().getYear()-year-1;
// m=(12-(month-DateEntity.today().getMonth()))/12.00;
// }
// else
// {
// y=DateEntity.today().getYear()-year;
// m=(DateEntity.today().getMonth()-month)/12.00;
// }
// String time=String.format("%.2f", y+m);
return String.format("%.2f", Math.abs(y+m));
}
/**
* 根据用户生日计算年龄
*/
public static int getAgeByBirthday(String birthday) {
if (birthday.length() > 10) {
birthday = birthday.substring(0, 10);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
if (cal.before(date)) {
throw new IllegalArgumentException(
"The birthDay is before Now.It's unbelievable!");
}
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH) + 1;
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(date);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH) + 1;
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirth;
if (monthNow <= monthBirth) {
if (monthNow == monthBirth) {
// monthNow==monthBirth
if (dayOfMonthNow < dayOfMonthBirth) {
age--;
}
} else {
// monthNow>monthBirth
age--;
}
}
return age;
}
public static int getAgeByBirthdays(String birthday) {
if (birthday.length() > 10) {
birthday = birthday.substring(0, 10);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
if (cal.before(date)) {
throw new IllegalArgumentException(
"The birthDay is before Now.It's unbelievable!");
}
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH) + 1;
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(date);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH) + 1;
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirth;
// if (monthNow <= monthBirth) {
// if (monthNow == monthBirth) {
//
// if (dayOfMonthNow < dayOfMonthBirth) {
// age--;
// }
// } else {
//
// age--;
// }
// }
return age;
}
/**
* 以友好的方式显示时间
*
* @param sdate
* @return
*/
public static String friendly_time(String sdate) {
Date time = null;
time = str2Date(sdate);
if (time == null) {
return "Unknown";
}
String ftime = "";
Calendar cal = Calendar.getInstance();
// 判断是否是同一天
String curDate = date2Str(cal.getTime());
String paramDate = date2Str(time);
if (curDate.equals(paramDate)) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0)
ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分钟前";
else
ftime = hour + "小时前";
return ftime;
}
long lt = time.getTime() / 86400000;
long ct = cal.getTimeInMillis() / 86400000;
int days = (int) (ct - lt);
if (days == 0) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0)
ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分钟前";
else
ftime = hour + "小时前";
} else if (days == 1) {
ftime = "昨天";
} else if (days == 2) {
ftime = "前天 ";
} else if (days > 2 && days < 31) {
ftime = days + "天前";
} else if (days >= 31 && days <= 2 * 31) {
ftime = "一个月前";
} else if (days > 2 * 31 && days <= 3 * 31) {
ftime = "2个月前";
} else if (days > 3 * 31 && days <= 4 * 31) {
ftime = "3个月前";
} else {
ftime = date2Str(time);
}
return ftime;
}
/**
* 以友好的方式显示时间
*
* @param sdate
* @return
*/
public static int compareTime(String sdate, int defaultTime) {
Date time = null;
time = str2Date(sdate, "yyyy-MM-dd HH:mm:ss");
if (time == null) {
return 0;
}
int ftime = defaultTime;
Calendar cal = Calendar.getInstance();
// 判断是否是同一天
String curDate = date2Str(cal.getTime(), "yyyy-MM-dd HH:mm:ss");
String paramDate = date2Str(time, "yyyy-MM-dd HH:mm:ss");
if (curDate.equals(paramDate)) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0)
ftime = (int) Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1);
return ftime;
}
long lt = time.getTime() / 86400000;
long ct = cal.getTimeInMillis() / 86400000;
int days = (int) (ct - lt);
if (days == 0) {
int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);
if (hour == 0)
ftime = (int) Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1);
}
return ftime;
}
/**
* 比较两个日期的大小,日期格式为yyyy-MM-dd
*
* @param str1 the first date
* @param str2 the second date
* @return true <br/>false
*/ public static boolean isDateOneBigger(String str1, String str2) {
boolean isBigger = false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dt1 = null; Date dt2 = null;
try { dt1 = sdf.parse(str1);
dt2 = sdf.parse(str2);
} catch (ParseException e) {
e.printStackTrace();
} if (dt1.getTime() >= dt2.getTime()) {
isBigger = true;
} else if (dt1.getTime() < dt2.getTime()) {
isBigger = false;
} return isBigger;
}
public static boolean isDateOneBigger1(String str1, String str2) {
boolean isBigger = false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dt1 = null; Date dt2 = null;
try { dt1 = sdf.parse(str1);
dt2 = sdf.parse(str2);
} catch (ParseException e) {
e.printStackTrace();
} if (dt1.getTime() > dt2.getTime()) {
isBigger = true;
} else if (dt1.getTime() <= dt2.getTime()) {
isBigger = false;
} return isBigger;
}
}
@@ -0,0 +1,73 @@
package cn.shangyu.gdxzExpert.utils;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils;
public class DecimalInputFilter implements InputFilter {
private static int max_point=2;//保留小数点后两位
public DecimalInputFilter() {
}
/**
* 输入框小数的位数 示例保留两位小数
*/
private int KEEP_SEVERAL_DECIMAL_PLACES = 2;
// public PointLengthFilter(int index) {
// this.KEEP_SEVERAL_DECIMAL_PLACES = index;
// }
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// 删除等特殊字符,直接返回
if ("".equals(source.toString())) {
return null;
}
String dValue = dest.toString();
if(TextUtils.isEmpty(dValue)){
//如果直接copy过来的数字 之前没有输入数字
if (source.toString().contains(".")){
int i = source.toString().indexOf(".");
if (end > i + KEEP_SEVERAL_DECIMAL_PLACES + 1){
return source.subSequence(start, i + KEEP_SEVERAL_DECIMAL_PLACES + 1);
}
}
return source;
}
String[] splitArray = dValue.split("\\.");
if(splitArray != null && splitArray.length > 1){
int cursorIndex = dValue.indexOf(".");
if(dend > cursorIndex){
String dotValue = splitArray[1];
int diff = dotValue.length() + 1 - KEEP_SEVERAL_DECIMAL_PLACES;
if(diff > 0){
return "";
}
}
}
//如果是粘贴过来的一串,判断长度,只保留小数点后KEEP_SEVERAL_DECIMAL_PLACES位
if (end >= KEEP_SEVERAL_DECIMAL_PLACES && dValue.contains(".")){
if (splitArray != null){
if (splitArray.length == 1){
//小数点后边没有东西,保留KEEP_SEVERAL_DECIMAL_PLACES位
return source.subSequence(start, KEEP_SEVERAL_DECIMAL_PLACES);
}else {
//小数点后边有东西
int i = KEEP_SEVERAL_DECIMAL_PLACES - splitArray[1].length();
if (i > 0){
//保留KEEP_SEVERAL_DECIMAL_PLACES - 已经存在的长度
return source.subSequence(start, i);
}else {
//成负数了,说明小数点后边的长度超过了KEEP_SEVERAL_DECIMAL_PLACES.
return "";
}
}
}
}
return source;
}
}
@@ -0,0 +1,181 @@
/*
* Copyright (c) 2015 The CCP project authors. All Rights Reserved.
*
* Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license
* that can be found in the LICENSE file in the root of the web site.
*
* http://www.yuntongxun.com
*
* An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/package cn.shangyu.gdxzExpert.utils;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.WindowManager;
import java.lang.reflect.Method;
import cn.shangyu.gdxzExpert.application.BaseApplication;
/**
* Created by Jorstin on 2015/3/18.
*/
public class DensityUtil {
// 根据屏幕密度转换
private static float mPixels = 0.0F;
private static float density = -1.0F;
/**
*
* @param context
* @param pixels
* @return
*/
public static int getDisplayMetrics(Context context, float pixels) {
if (mPixels == 0.0F)
mPixels = context.getResources().getDisplayMetrics().density;
return (int) (0.5F + pixels * mPixels);
}
public static int getImageWeidth(Context context , float pixels) {
LogUtil.e("screen width " + context.getResources().getDisplayMetrics().widthPixels);
return context.getResources().getDisplayMetrics().widthPixels - 66 - getDisplayMetrics(context, pixels);
}
/**
* 像素转化dip
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue / scale + 0.5f);
}
/**
* dip转化像素
* @param dipValue
* @return
*/
public static int dip2px(float dipValue){
final float scale = Resources.getSystem().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
/**
* @param context
* @param height
* @return
*/
public static int getMetricsDensity(Context context , float height) {
DisplayMetrics localDisplayMetrics = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getMetrics(localDisplayMetrics);
return Math.round(height * localDisplayMetrics.densityDpi / 160.0F);
}
public static int fromDPToPix(Context context, int dp) {
return Math.round(getDensity(context) * dp);
}
/**
* @param context
* @return
*/
public static float getDensity(Context context) {
if (context == null)
context = BaseApplication.getInstance().getApplicationContext();
if (density < 0.0F)
density = context.getResources().getDisplayMetrics().density;
return density;
}
public static int round(Context context, int paramInt) {
return Math.round(paramInt / getDensity(context));
}
/**
* 保持字体大小不随系统设置变化(用在界面加载之前)
* 要重写Activity的attachBaseContext()
*/
public static Context attachBaseContext(Context context, float fontScale) {
Configuration config = context.getResources().getConfiguration();
//正确写法
config.fontScale = fontScale;
return context.createConfigurationContext(config);
}
/**
* 保持字体大小不随系统设置变化(用在界面加载之前)
* 要重写Activity的getResources()
*/
public static Resources getResources(Context context, Resources resources, float fontScale) {
Configuration config = resources.getConfiguration();
if(config.fontScale != fontScale) {
config.fontScale = fontScale;
return context.createConfigurationContext(config).getResources();
} else {
return resources;
}
}
/**
* 保存字体大小,后通知界面重建,它会触发attachBaseContext,来改变字号
*/
public static void recreate(Activity activity) {
activity.recreate();
}
/**
* 系统设置"显示大小"时原有UI样式保持不变:
* <p>
* 1、当调节手机系统"显示大小"【调大】的时候,相应的dpi会变大【dp = (dpi/160) * px】,此时dp就会变大,所以相应的UI布局就会变大。
* 2、当调节手机系统"分辨率"【调小】的时候,相应的dpi会变小【比如由480-->320】。如果此时使用技术手段使dpi保持不变,那么相同的dp就会占用更多的px,所以UI布局就会变大。
*
* @param context
*/
public static void setDefaultDisplay(Context context) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
Configuration origConfig = context.getResources().getConfiguration();
//获取手机出厂时默认的densityDpi【注释1】
origConfig.densityDpi = getDefaultDisplayDensity();
context.getResources().updateConfiguration(origConfig, context.getResources().getDisplayMetrics());
}
}
public static int getDefaultDisplayDensity() {
try {
Class clazz = Class.forName("android.view.WindowManagerGlobal");
Method method = clazz.getMethod("getWindowManagerService");
method.setAccessible(true);
Object iwm = method.invoke(clazz);
Method getInitialDisplayDensity = iwm.getClass().getMethod("getInitialDisplayDensity", int.class);
getInitialDisplayDensity.setAccessible(true);
Object densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY);
return (int) densityDpi;
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
}
@@ -0,0 +1,33 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.Activity;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* Created by WANGChengXin on 2019/5/23.
*/
public class DestroyActivityUtil {
private static Map<String, Activity> destoryMap = new HashMap<>();
//将Activity添加到队列中
public static void addDestoryActivityToMap(Activity activity, String activityName) {
destoryMap.put(activityName, activity);
}
//根据名字销毁制定Activity
public static void destoryActivity(String activityName) {
Set<String> keySet = destoryMap.keySet();
if (keySet.size() > 0) {
for (String key : keySet) {
if (activityName.equals(key)) {
destoryMap.get(key).finish();
}
}
}
}
}
@@ -0,0 +1,151 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import cn.shangyu.gdxzExpert.ui.CustomProgressDialog;
import cn.shangyu.gdxzExpert.widget.CustomerDialog;
import cn.shangyu.gdxzExpert.widget.MyAlertDialog;
/**
* 对话框创建工具类
*
*/
public class DialogUtil {
private static CustomerDialog customerDialog;
private static MyAlertDialog alertDialog;
/**
* 创建进度对话框
* @param context
* @param content
* @return
*/
public static Dialog createProgressDialog(Context context,String content){
return new CustomProgressDialog(context, content);
}
/**
* 创建进度对话框
* @param context
* @param content
* @return
*/
public static Dialog createProgressDialog(Context context,String content,int theme){
return new CustomProgressDialog(context, content,theme);
}
/**
*
* getCusDialog
* 创建对话框,自定义的对话框与getMyAlertDialog方法差不多,但可以自定义标题
* @param context 上下文
* @param title 对话框标题
* @param content 对话框内容
* @param okListener 确定按钮监听
* @param cancelListener 取消按钮监听
* @return
* CustomerDialog
*/
public static CustomerDialog getCusDialog(Context context, CharSequence title,
CharSequence content, OnClickListener okListener,
OnClickListener cancelListener) {
customerDialog = new CustomerDialog(context);
customerDialog.setCancelable(false);
customerDialog.setTitle(title);
customerDialog.setContent(content);
customerDialog.setOkBtnOnclickListener(okListener);
customerDialog.setCancelBtnOnclickListener(cancelListener);
return customerDialog;
}
// 显示弹窗
public static void showCusDialog() {
if (customerDialog != null) {
customerDialog.show();
}
}
// 关闭弹窗
public static void dismissCusDialog() {
if (customerDialog != null) {
customerDialog.dismiss();
}
}
/**
*
* getMyProDialog
* 自定义的带有进度条的对话框,如果需要显示的进度的对话框,比如下载对话框等等,此对话框只有取消一个按钮
* @param context 上下文
* @param buttontitle 取消的按钮名字
* @param content 内容
* @param cancelListener 取消监听
* @return
* MyAlertDialog
*/
public static MyAlertDialog getMyProDialog(Context context, String buttontitle,
String content,OnClickListener cancelListener){
alertDialog = new MyAlertDialog(context);
alertDialog.setCancelable(false);
alertDialog.setProgressBarVisibility(View.VISIBLE);
alertDialog.setMessage(content);
alertDialog.setSingleButton(View.VISIBLE);
alertDialog.setSingleButton(buttontitle,cancelListener);
alertDialog.show();
return alertDialog;
}
/**
*
* getMyAlertDialog
* 自定义的对话框与getCusDialog方法差不多,是有确定与取消的,自由选择使用
* @param context 上下文
* @param content 内容
* @param okListener 确定监听
* @param cancelListener 取消监听
* @return
* MyAlertDialog
*/
public static MyAlertDialog getMyAlertDialog(Context context, String content,
OnClickListener okListener,OnClickListener cancelListener){
alertDialog = new MyAlertDialog(context);
alertDialog.setSingleButton(View.GONE);
alertDialog.setMessage(content);
alertDialog.setPositiveButton("确定",okListener);
alertDialog.setNegativeButton("取消",cancelListener);
return alertDialog;
}
// 显示弹窗
public static void showMyAlertDialog() {
if (alertDialog != null) {
alertDialog.show();
}
}
// 关闭弹窗
public static void dismissMyAlertDialog() {
if (alertDialog != null) {
alertDialog.dismiss();
}
}
public static void setMessage(String mes) {
if (alertDialog != null) {
alertDialog.setMessage(mes);
}
}
public static void setProgress(int p) {
if (alertDialog != null) {
alertDialog.setProgress(p);
}
}
}
@@ -0,0 +1,172 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import androidx.annotation.RequiresApi;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.Files;
public class DownLoadUrlImage {
Context context;
Bitmap bitmap;
public DownLoadUrlImage(String imgurl, Context context) {
this.context = context;
new Task().execute(imgurl);
}
public Bitmap GetImageInputStream(String imageurl) {
URL url;
HttpURLConnection connection = null;
Bitmap bitmap = null;
try {
url = new URL(imageurl);
connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(6000); // 超时设置
connection.setDoInput(true);
connection.setUseCaches(false); // 设置不使用缓存
InputStream inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 异步线程下载图片
*
*/
class Task extends AsyncTask<String, Integer, Void> {
protected Void doInBackground(String... params) {
bitmap = GetImageInputStream((String) params[0]);
return null;
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Message message = new Message();
message.what = 0x123;
handler.sendMessage(message);
}
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0x123) {
// SavaImage(bitmap, Environment.getExternalStorageDirectory()
// .getPath() + "/gdxzExpert/picture");
SavaImage(bitmap, UIUtils.getContext().getExternalFilesDir("").getAbsolutePath() + "/gdxzExpert/picture");
}
};
};
/**
* 保存位图到本地
*
* @param bitmap
* @param path
* 本地路径
* @return void
*/
@RequiresApi(api = Build.VERSION_CODES.P)
public void SavaImage(Bitmap bitmap, String path) {
File file = new File(path);
FileOutputStream fileOutputStream = null;
// 文件夹不存在,则创建它
if (!file.exists()) {
file.mkdirs();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file2 = new File(file, fileName);
try {
fileOutputStream = new FileOutputStream(file2);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
// 其次把文件插入到系统图库
try {
// MediaStore.Images.Media.insertImage(context.getContentResolver(),
// file.getAbsolutePath(), fileName, null);
ContentResolver localContentResolver = context.getContentResolver();
ContentValues localContentValues = getImageContentValues(file2, System.currentTimeMillis());
Uri uri = localContentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, localContentValues);
copyFileAfterQ(context, localContentResolver, file2, uri);
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
} catch (Exception e)
{
e.printStackTrace();
}
// // 其次把文件插入到系统图库
// try {
// MediaStore.Images.Media.insertImage(context.getContentResolver(),
// file.getAbsolutePath(), fileName, null);
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
// catch (Exception e)
// {
// e.printStackTrace();
// }
// // 最后通知图库更新
// context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
// Uri.parse("file://" + file2.getAbsolutePath())));
}
/**
* 获取图片的ContentValue
*/
public static ContentValues getImageContentValues(File paramFile, long timestamp) {
ContentValues localContentValues = new ContentValues();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
localContentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "DCIM/Camera");
}
localContentValues.put(MediaStore.Images.Media.TITLE, paramFile.getName());
localContentValues.put(MediaStore.Images.Media.DISPLAY_NAME, paramFile.getName());
localContentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
localContentValues.put(MediaStore.Images.Media.DATE_TAKEN, timestamp);
localContentValues.put(MediaStore.Images.Media.DATE_MODIFIED, timestamp);
localContentValues.put(MediaStore.Images.Media.DATE_ADDED, timestamp);
localContentValues.put(MediaStore.Images.Media.ORIENTATION, 0);
localContentValues.put(MediaStore.Images.Media.DATA, paramFile.getAbsolutePath());
localContentValues.put(MediaStore.Images.Media.SIZE, paramFile.length());
return localContentValues;
}
public static void copyFileAfterQ(Context context, ContentResolver localContentResolver, File tempFile, Uri localUri) throws IOException {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R &&
context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) {
//拷贝文件到相册的uri,android11及以上得这么干,否则不会显示。可以参考ScreenMediaRecorder的save方法
OutputStream os = localContentResolver.openOutputStream(localUri, "w");
Files.copy(tempFile.toPath(), os);
os.close();
tempFile.deleteOnExit();
}
}
}
@@ -0,0 +1,61 @@
package cn.shangyu.gdxzExpert.utils;
import java.security.MessageDigest;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class EncryptionKit {
public static String md5Encrypt(String srcStr) {
return encrypt("MD5", srcStr);
}
public static String sha1Encrypt(String srcStr) {
return encrypt("SHA-1", srcStr);
}
public static String sha256Encrypt(String srcStr) {
return encrypt("SHA-256", srcStr);
}
public static String sha384Encrypt(String srcStr) {
return encrypt("SHA-384", srcStr);
}
public static String sha512Encrypt(String srcStr) {
return encrypt("SHA-512", srcStr);
}
public static String encrypt(String algorithm, String srcStr) {
try {
StringBuilder result = new StringBuilder();
MessageDigest md = MessageDigest.getInstance(algorithm);
byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1)
result.append("0");
result.append(hex);
}
return result.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String HMACSHA256(String data, String key) {
try {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
return sb.toString().toLowerCase();
} catch (Exception e) {
return "";
}
}
}
@@ -0,0 +1,55 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import cn.shangyu.gdxzExpert.activity.ExitDialog;
import cn.shangyu.gdxzExpert.widget.ECAlertDialog;
/**
* Created by WANGChengXin on 2019/12/17.
*/
public class ExitReceiver extends BroadcastReceiver {
private ECAlertDialog dilaog2 = null;
@Override
public void onReceive(Context context, Intent intent) {
LogUtil.i("接受到强制退出广播");
Intent it = new Intent();
it.setClass(context, ExitDialog.class);
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(it);
// if(dilaog2==null){
// dilaog2 = ECAlertDialog.buildAlert(CCPAppManager.getContext(),
// "您的账号出现异常,已经被系统删除,如有疑问请联系肝胆相照工作人员~", "点击退出账号", new DialogInterface.OnClickListener() {// 确定
// @Override
// public void onClick(DialogInterface dialog, int which) {
// // TODO Auto-generated method stub
// SharePrefUtil.clear(CCPAppManager.getContext(), "isLogin");
// dilaog2.dismiss();
// Constant.islogout =1;
// Intent intent = new Intent(CCPAppManager.getContext(), LoginActivity.class);
// intent.putExtra("flag", true);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
// intent.putExtra("phone", SharePrefUtil.getString(CCPAppManager.getContext(), Constant.mobile, ""));
// CCPAppManager.getContext().startActivity(intent);
//
// // 1登入系统 2退出系统 3患者客户端在手机前台运行 4.客户端在手机后台运行
//
//// System.exit(0);
// }
// });
// dilaog2.setTitle("温馨提示");
// dilaog2.setCanceledOnTouchOutside(false);
// dilaog2.setCancelable(false);
// dilaog2.getWindow();
// dilaog2.show();
// }
}
}
@@ -0,0 +1,265 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.util.Log;
/**
* 文件处理工具类
*
* @author naibo-liao
* @时间: 2013-1-4下午03:13:08
*/
public class FileUtils {
public static final long B = 1;
public static final long KB = B * 1024;
public static final long MB = KB * 1024;
public static final long GB = MB * 1024;
private static final int BUFFER = 8192;
/**
* 格式化文件大小<b> 带有单位
*
* @param size
* @return
*/
public static String formatFileSize(long size) {
StringBuilder sb = new StringBuilder();
String u = null;
double tmpSize = 0;
if (size < KB) {
sb.append(size).append("B");
return sb.toString();
} else if (size < MB) {
tmpSize = getSize(size, KB);
u = "KB";
} else if (size < GB) {
tmpSize = getSize(size, MB);
u = "M";
} else {
tmpSize = getSize(size, GB);
u = "G";
}
return sb.append(twodot(tmpSize)).append(u).toString();
}
/**
* 保留两位小数
*
* @param d
* @return
*/
public static String twodot(double d) {
return String.format("%.2f", d);
}
public static double getSize(long size, long u) {
return (double) size / (double) u;
}
/**
* sd卡挂载且可用
*
* @return
*/
public static boolean isSdCardMounted() {
return android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED);
}
/**
* 递归创建文件目录
*
* @param path
* */
public static void CreateDir(String path) {
if (!isSdCardMounted())
return;
File file = new File(path);
if (!file.exists()) {
try {
file.mkdirs();
} catch (Exception e) {
Log.e("hulutan", "error on creat dirs:" + e.getStackTrace());
}
}
}
/**
* 读取文件
*
* @param file
* @return
* @throws IOException
*/
public static String readTextFile(File file) throws IOException {
String text = null;
InputStream is = null;
try {
is = new FileInputStream(file); //将一个文件转换为文件流
text = readTextInputStream(is);;
} finally {
if (is != null) {
is.close();
}
}
return text;
}
/**
* 从流中读取文件
*
* @param is
* @return
* @throws IOException
*/
public static String readTextInputStream(InputStream is) throws IOException {
StringBuffer strbuffer = new StringBuffer();
String line;
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(is));
while ((line = reader.readLine()) != null) {
strbuffer.append(line).append("\r\n");
}
} finally {
if (reader != null) {
reader.close();
}
}
return strbuffer.toString();
}
/**
* 将文本内容写入文件
*
* @param file
* @param str
* @throws IOException
*/
public static void writeTextFile(File file, String str) throws IOException {
DataOutputStream out = null;
try {
out = new DataOutputStream(new FileOutputStream(file));
out.write(str.getBytes());
} finally {
if (out != null) {
out.close();
}
}
}
/**
* 将Bitmap保存本地JPG图片
* @param url
* @return
* @throws IOException
*/
/*public static String saveBitmap2File(String url) throws IOException {
BufferedInputStream inBuff = null;
BufferedOutputStream outBuff = null;
SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String timeStamp = sf.format(new Date());
File targetFile = new File(Constants.ENVIROMENT_DIR_SAVE, timeStamp
+ ".jpg");
File oldfile = ImageLoader.getInstance().getDiscCache().get(url);
try {
inBuff = new BufferedInputStream(new FileInputStream(oldfile));
outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));
byte[] buffer = new byte[BUFFER];
int length;
while ((length = inBuff.read(buffer)) != -1) {
outBuff.write(buffer, 0, length);
}
outBuff.flush();
return targetFile.getPath();
} catch (Exception e) {
} finally {
if (inBuff != null) {
inBuff.close();
}
if (outBuff != null) {
outBuff.close();
}
}
return targetFile.getPath();
} */
/**
* 读取表情配置文件
*
* @param context
* @return
*/
public static List<String> getEmojiFile(Context context) {
try {
List<String> list = new ArrayList<String>();
InputStream in = context.getResources().getAssets().open("emoji");// 文件名字为rose.txt
BufferedReader br = new BufferedReader(new InputStreamReader(in,
"UTF-8"));
String str = null;
while ((str = br.readLine()) != null) {
list.add(str);
}
return list;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取一个文件夹大小
*
* @param f
* @return
* @throws Exception
*/
public static long getFileSize(File f) {
long size = 0;
File flist[] = f.listFiles();
for (int i = 0; i < flist.length; i++) {
if (flist[i].isDirectory()) {
size = size + getFileSize(flist[i]);
} else {
size = size + flist[i].length();
}
}
return size;
}
/**
* 删除文件
*
* @param file
*/
public static void deleteFile(File file) {
if (file.exists()) { // 判断文件是否存在
if (file.isFile()) { // 判断是否是文件
file.delete(); // delete()方法 你应该知道 是删除的意思;
} else if (file.isDirectory()) { // 否则如果它是一个目录
File files[] = file.listFiles(); // 声明目录下所有的文件 files[];
for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件
deleteFile(files[i]); // 把每个文件 用这个方法进行迭代
}
}
file.delete();
}
}
}
@@ -0,0 +1,41 @@
package cn.shangyu.gdxzExpert.utils;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.view.View;
public class GrayManager {
private static GrayManager mInstance;
private Paint mGrayPaint;
private ColorMatrix mGrayMatrix;
public static GrayManager getInstance() {
if (mInstance == null) {
synchronized (GrayManager.class) {
if (mInstance == null) {
mInstance = new GrayManager();
}
}
}
return mInstance;
}
//初始化
public void init() {
mGrayMatrix = new ColorMatrix();
mGrayPaint = new Paint();
mGrayMatrix.setSaturation(0);
mGrayPaint.setColorFilter(new ColorMatrixColorFilter(mGrayMatrix));
}
//硬件加速置灰方法
public void setLayerGrayType(View view) {
if(!CommonUtil.NeedBlack())
{
return;
}
if (mGrayMatrix == null || mGrayPaint == null) {
init();
}
view.setLayerType(View.LAYER_TYPE_HARDWARE, mGrayPaint);
}
}
@@ -0,0 +1,78 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
/**
* json的生成与解析工具
* 类名称:GsonTools
* 类描述:TODO
* 创建人:苏三元
* 时间:2015-7-1 下午4:52:32
* 版权:河南商宇科技有限公司--版权所有 (c) 2015
*
*/
public class GsonTools {
public GsonTools() {
// TODO Auto-generated constructor stub
}
public static String createGsonString(Object object) {
Gson gson = new Gson();
String gsonString = gson.toJson(object);
return gsonString;
}
public static <T> T fromGsonToBean(String gsonString, Class<T> cls) {
Gson gson = new Gson();
T t = gson.fromJson(gsonString, cls);
return t;
}
/**
*
* @param json
* @param cls
* @return牛鼻的解析
*/
public static <T> ArrayList<T> fromGsonToList(String json, Class<T> cls) {
Gson gson = new Gson();
ArrayList<T> mList = new ArrayList<T>();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
mList.add(gson.fromJson(elem, cls));
}
return mList;
}
// public static <T> List<T> fromGsonToList(String gsonString, Class<T> cls) {
// Gson gson = new Gson();
// List<T> list = gson.fromJson(gsonString, new TypeToken<List<T>>() {}.getType());
// return list;
// }
public static <T> List<Map<String, T>> fromGsonToListMaps(
String gsonString) {
List<Map<String, T>> list = null;
Gson gson = new Gson();
list = gson.fromJson(gsonString, new TypeToken<List<Map<String, T>>>() {
}.getType());
return list;
}
public static <T> Map<String, T> fromGsonToMaps(String gsonString) {
Map<String, T> map = null;
Gson gson = new Gson();
map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() {
}.getType());
return map;
}
}
@@ -0,0 +1,119 @@
package cn.shangyu.gdxzExpert.utils;
import java.security.DigestException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
//Hash算法(消息摘要算法)工具类
public class HashTools {
private static MessageDigest digest; //消息摘要对象
//私有化的构造方法
private HashTools() {
}
//按照MD5进行消息摘要计算(哈希计算)
public static String digestByMD5(String source) throws NoSuchAlgorithmException {
digest=MessageDigest.getInstance("MD5");
return handler(source);
}
//按照SHA-1进行消息摘要计算(哈希计算)
public static String digestBySHA1(String source) throws NoSuchAlgorithmException {
digest=MessageDigest.getInstance("SHA-1");
return handler(source);
}
//按照SHA-256进行消息摘要计算(哈希计算)
public static String digestBySHA256(String source) throws NoSuchAlgorithmException {
digest=MessageDigest.getInstance("SHA-256");
return handler(source);
}
//按照SHA-512进行消息摘要计算(哈希计算)
public static String digestBySHA512(String source) throws NoSuchAlgorithmException {
digest=MessageDigest.getInstance("SHA-512");
return handler(source);
}
//通过消息再要对象,处理加密内容
public static String handler(String souce) {
digest.update(souce.getBytes()); //调用update()输入数据
byte[] bytes=digest.digest();
String ret=bytesToHex(bytes);
return ret;
}
//将字节数组转换为十六进制字符串
public static String bytesToHex(byte[] bytes) {
StringBuilder sb=new StringBuilder();
for(byte b:bytes) {
sb.append(String.format("%02x", b)); //将字节值转换为2为十六进制字符串
}
return sb.toString();
}
private static final String HMAC_SHA1 = "HmacSHA1";
/**
*
* @param data 数据
* @param key 秘钥
* @return 密文
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
*/
private static String encrypt(String data, String key) throws NoSuchAlgorithmException, InvalidKeyException {
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), HMAC_SHA1);
Mac mac = Mac.getInstance(HMAC_SHA1);
mac.init(secret);
return toHexString(mac.doFinal(data.getBytes()));
}
private static String toHexString(byte[] bytes) {
Formatter formatter = new Formatter();
for (byte b : bytes) {
formatter.format("%02x", b);
}
return formatter.toString();
}
// 计算 HMAC-SHA1 签名并返回十六进制字符串
public static String calculateHmacSha1(String data) throws NoSuchAlgorithmException, InvalidKeyException, DigestException {
// 创建 HMAC-SHA1 摘要算法实例
Mac hmacSha1 = Mac.getInstance("HmacSHA1");
String key = Url.appkey; // 您的密钥
// 使用提供的密钥初始化 HMAC
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
hmacSha1.init(secretKey);
// 计算 HMAC-SHA1
byte[] signatureBytes = hmacSha1.doFinal(data.getBytes());
// 转换为十六进制字符串
StringBuilder hexSignature = new StringBuilder();
for (byte b : signatureBytes) {
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) {
hexSignature.append('0');
}
hexSignature.append(hex);
}
return hexSignature.toString();
}
// public static void main(String []args) {
// try {
// String concatenatedParamsStr = "mobile=13051427845&user_name=%E5%90%B4%E4%BB%8E%E5%85%B4"; // 这里是您的输入数据
// String key = "26e8675f44565b1ed4eaaa0fcf3531d7"; // 您的密钥
//
// String signature = calculateHmacSha1(concatenatedParamsStr, key);
// System.out.println("HMAC-SHA1 Signature: " + signature);
// } catch (NoSuchAlgorithmException | InvalidKeyException | DigestException e) {
// e.printStackTrace();
// }
// }
// public static void main(String[] args) throws Exception {
// String hmac = encrypt("This is plaintext", "123");
// System.out.println(hmac);
// }
}
@@ -0,0 +1,144 @@
package cn.shangyu.gdxzExpert.utils;
import static cn.shangyu.gdxzExpert.utils.HashTools.calculateHmacSha1;
import android.util.Log;
import java.net.URLEncoder;
import java.security.DigestException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
*
* Hmacsha256验证模式
* @author haomingming
*
*/
public class HmacSha256ApiVerify{
// private static String appkey = "26e8675f44565b1ed4eaaa0fcf3531d7";
/**
* 转化
* @param parameterMap
* @return
*/
public Map<String, String> transform(Map<String, String[]> parameterMap){
Map<String, String> data = new HashMap<String, String>();
Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
Iterator<Entry<String, String[]>> iterator = entrySet.iterator();
while(iterator.hasNext()){
Entry<String, String[]> next = iterator.next();
String key = next.getKey();
String[] value = next.getValue();
if(value != null && value.length > 0){
data.put(key, value[0]);
}
}
return data;
}
public static String[] getSign(Map<String, String> params) {
String[] str = new String[2];
List<String> keys = new ArrayList<>(params.keySet());
List<String> tmp = new ArrayList<>();
Collections.sort(keys);
for (String key : keys) {
if (null != params.get(key) && params.get(key).length() > 0) {
tmp.add(key + "=" + params.get(key));
}
}
String join = String.join("&", tmp);
// System.out.println("加密器中的join:"+ join);
str[0] = join;
str[1] = EncryptionKit.HMACSHA256(join, Url.appkey);
// System.out.println("加密后的值:"+ str[1]);
return str;
}
public static String getSignStr(Map<String, String> params) {
String[] str = new String[2];
List<String> keys = new ArrayList<>(params.keySet());
List<String> tmp = new ArrayList<>();
Collections.sort(keys);
for (String key : keys) {
if (null != params.get(key) && params.get(key).length() > 0) {
tmp.add(key + "=" + URLEncoder.encode(params.get(key)));
}
}
String join = String.join("&", tmp);
Log.d("okhttp","join "+join);
// System.out.println("加密器中的join:"+ join);
// str[0] = join;
// try {
//// str[0]=URLEncoder.encode("吴从兴","utf-8");
//
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
try {
str[1] =calculateHmacSha1(join);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (DigestException e) {
e.printStackTrace();
}
// str[1] = EncryptionKit.HMACSHA256(join, appkey);
// System.out.println("加密后的值:"+ str[1]);
return str[1];
}
// public static void main(String[] args) {
// Map<String, String> data = new HashMap<String, String>();
// //解答完成
// data.put("a", "1");
// data.put("b", "2");
// data.put("c", "3");
// String[] sign = getSign(data);
// System.out.println("sign = " + sign);
// }
public static String getSha1(String str) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes("UTF-8"));
byte[] md = mdTemp.digest();
int j = md.length;
char buf[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}
return new String(buf);
} catch (Exception e) {
return null;
}
}
}
@@ -0,0 +1,363 @@
package cn.shangyu.gdxzExpert.utils;
import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import com.google.gson.Gson;
import com.hjq.window.EasyWindow;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import cn.shangyu.gdxzExpert.R;
import cn.shangyu.gdxzExpert.bean.TimestampBean;
import cn.shangyu.gdxzExpert.http.HttpHelper;
import cn.shangyu.gdxzExpert.http.OnCallBackFromNet;
import cn.shangyu.gdxzExpert.netease.config.LogoutHelper;
/**
* @author 作者 wcx
* @version 创建时间:2018-7-11 上午11:22:00
* 类说明
*/
public class HttpMD5SendInfoUtil {
/**
* 签到
* */
public static void sendJsonPostParamtoNetSignMD5(final String postUrl,final Map<String, String> param,Context mContext) {
HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> info) {
// SharePrefUtil.saveString(mActivity,
// Url.getExpertroll,
// info.result);
String uuid = SharePrefUtil.getString(getContext(), Constant.uuid, "");
param.put("user_uuid", uuid);
TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class);
param.put("timestamp", bean.getTimestamp());
param.put("client_type", "A");
param.put("version", UpdateVersionUtils.getVersionName());
new Thread() {
public void run() {
String encoding = "UTF-8";
Gson gson = new Gson();
String params = gson.toJson(param);
byte[] data;
try {
String sign = SignUtil.getSign(param);
data = params.getBytes(encoding);
URL url = new URL(postUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type","application/json");
conn.setRequestProperty("sign",sign);
conn.setRequestProperty("Content-Length",String.valueOf(data.length));
conn.setConnectTimeout(5 * 1000);
OutputStream outStream = conn.getOutputStream();
outStream.write(data);
outStream.flush();
outStream.close();
int ssss=conn.getResponseCode() ;
if (conn.getResponseCode() == 200) {
InputStream inStream = conn.getInputStream();
String result = new String(StreamTool.readInputStream(inStream), "UTF-8");
String string = new String(result);
JSONObject jsonObject = new JSONObject(string);
String optString = jsonObject.optString("code");
String message = jsonObject.optString("message");
if ("200".equals(optString)) {
Constant.isRefreshpoint = true;//个人中心界面刷新
ToastUtil.showMessage(message);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
// mShowDialog.dismiss();
// closeProgressDialog();
} finally {
// if (!top_right_text.isClickable()) {
// top_right_text.setClickable(true);
// }
}
}
}.start();
// Log.i("TAG", "result = "+info.result);
}
@Override
public void onFailure(HttpException arg0, String arg1) {
// ToastUtil.showToast("请求失败,请重试");
}
});
}
/**
*
* 无需结果请求,1.指南下载数量 2.增加视频阅读数量
* */
public static void sendJsonPostParamNoResultMD5(final String postUrl,final Map<String, String> param) {
HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> info) {
// SharePrefUtil.saveString(mActivity,
// Url.getExpertroll,
// info.result);
String uuid = SharePrefUtil.getString(getContext(), Constant.uuid, "");
if(StringUtil.isEmpty(uuid))
{
uuid= LogoutHelper.addUMTokenuuid;
}
if(CommonUtil.BigModule())
{
param.put("app_type", "1");
}
param.put("user_uuid", uuid);
TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class);
param.put("timestamp", bean.getTimestamp());
param.put("client_type", "A");
param.put("version", UpdateVersionUtils.getVersionName());
new Thread() {
public void run() {
String encoding = "UTF-8";
Gson gson = new Gson();
String params = gson.toJson(param);
byte[] data;
try {
String sign = SignUtil.getSign(param);
LogUtil.i("params = "+params.toString());
data = params.getBytes(encoding);
URL url = new URL(postUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type","application/json");
conn.setRequestProperty("sign",sign);
conn.setRequestProperty("Content-Length",String.valueOf(data.length));
conn.setConnectTimeout(5 * 1000);
OutputStream outStream = conn.getOutputStream();
outStream.write(data);
outStream.flush();
outStream.close();
int ssss=conn.getResponseCode() ;
if (ssss == 200) {
InputStream inStream = conn.getInputStream();
String result = new String(StreamTool.readInputStream(inStream), "UTF-8");
String string = new String(result);
LogUtil.i("result = "+result);
JSONObject jsonObject = new JSONObject(string);
String optString = jsonObject.optString("code");
String message = jsonObject.optString("message");
if ("200".equals(optString)) {
LogUtil.e("请求成功");
}
}else {
LogUtil.e("Code = "+ssss);
}
} catch (Exception e) {
LogUtil.e("提交失败,请重试 = "+e.getMessage());
// ToastUtil.showMessage("提交失败,请重试");
// TODO Auto-generated catch block
e.printStackTrace();
// mShowDialog.dismiss();
// closeProgressDialog();
} finally {
// if (!top_right_text.isClickable()) {
// top_right_text.setClickable(true);
// }
}
}
}.start();
// Log.i("TAG", "result = "+info.result);
}
@Override
public void onFailure(HttpException arg0, String arg1) {
// ToastUtil.showToast("请求失败,请重试");
}
});
}
/**
* 获取token
*/
public static void sendJsonPostParamTokenMD5s(final OnCallBackFromNet callBack) {
HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> info) {
Map<String, String> param=new HashMap<>();
String uuid = SharePrefUtil.getString(getContext(), Constant.uuid, "");
if(StringUtil.isEmpty(uuid))
{
uuid= LogoutHelper.addUMTokenuuid;
}
if(CommonUtil.BigModule())
{
param.put("app_type", "1");
}
param.put("user_uuid", uuid);
TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class);
param.put("timestamp", bean.getTimestamp());
param.put("client_type", "A");
param.put("version", UpdateVersionUtils.getVersionName());
new Thread() {
public void run() {
String encoding = "UTF-8";
Gson gson = new Gson();
String params = gson.toJson(param);
byte[] data;
try {
String sign = SignUtil.getSign(param);
LogUtil.i("params = "+params.toString());
data = params.getBytes(encoding);
URL url = new URL(Url.getRealyWorldToken);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type","application/json");
conn.setRequestProperty("sign",sign);
conn.setRequestProperty("Content-Length",String.valueOf(data.length));
conn.setConnectTimeout(5 * 1000);
OutputStream outStream = conn.getOutputStream();
outStream.write(data);
outStream.flush();
outStream.close();
int ssss=conn.getResponseCode() ;
if (ssss == 200) {
InputStream inStream = conn.getInputStream();
String result = new String(StreamTool.readInputStream(inStream), "UTF-8");
String string = new String(result);
LogUtil.i("result = "+result);
JSONObject jsonObject = new JSONObject(string);
String optString = jsonObject.optString("code");
String message = jsonObject.optString("message");
// Log.d("okhttp","result = "+result);
Log.d("okhttp","getRealyWorldToken "+result);
if ("200".equals(optString)) {
LogUtil.e("请求成功");
callBack.onCallbackFromThread(string);
}
else
{
callBack.onCallbackFromThread(string);
}
}else {
LogUtil.e("Code = "+ssss);
}
} catch (Exception e) {
LogUtil.e("提交失败,请重试 = "+e.getMessage());
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
@Override
public void onFailure(HttpException arg0, String arg1) {
// ToastUtil.showToast("请求失败,请重试");
}
});
}
public static void sendJsonPostParamTokenMD5(Context context,final OnCallBackFromNet callBack){
EasyWindow.with((Activity) context).setGravity(Gravity.CENTER)
.setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f)
.setText(R.id.tv_infotitle, "温馨提示")
.setText(R.id.tv_tishi, "查询失败,请点击重试再次查询")
.setVisibility(R.id.r_b, View.VISIBLE)
.setText(android.R.id.message, "确定")
.setOutsideTouchable(false)
.setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener<TextView>() {
@Override
public void onClick(EasyWindow<?> window, TextView view) {
window.cancel();
sendJsonPostParamTokenMD5s(callBack);
}
})
.setOnClickListener(R.id.btn_cancel, new EasyWindow.OnClickListener<TextView>() {
@Override
public void onClick(EasyWindow<?> window, TextView view) {
window.cancel();
}
}).show();
}
public static int hasrealtoken(String s)
{
try {
JSONObject jsonObject=new JSONObject(s);
if("200".equals(jsonObject.optString("code")))
{
return 1;
}
else if(
"30007".equals(jsonObject.optString("code"))||"30012".equals(jsonObject.optString("code")))
{
SharePrefUtil.saveString(getContext(),"x_access_token","");
return 0;
}
else if(
"30014".equals(jsonObject.optString("code"))||"30020".equals(jsonObject.optString("code")))
{
SharePrefUtil.saveString(getContext(),"x_access_token","");
return -1;
}
else
{
return -2;
}
} catch (JSONException e) {
e.printStackTrace();
}
return 1;
}
}
@@ -0,0 +1,57 @@
package cn.shangyu.gdxzExpert.utils;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class HttpUtils {
public static String getData(String url, HashMap<String, String> params) {
HttpPost post = new HttpPost(url);
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000);
ArrayList<NameValuePair> paramPairs = new ArrayList<>();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
try {
post.setEntity(new UrlEncodedFormEntity(paramPairs, "UTF-8"));
Log.d("gdxzHttpUtils",paramPairs.toString());
} catch (UnsupportedEncodingException e) {
return "";
}
try {
HttpResponse response;
response = httpclient.execute(post);
String inf;
if (response.getStatusLine().getStatusCode() == 200) {// 判断响应状态码
inf = EntityUtils.toString(response.getEntity());
return inf;
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
@@ -0,0 +1,52 @@
package cn.shangyu.gdxzExpert.utils;
import android.graphics.Bitmap;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
/**
*
* ImageOptions.java
* @author ssy
* @date 2015-9-6 下午7:34:10
* Copyright (C) 2015 河南商宇科技有限公司
* 4.如果经常出现OOM(别人那边看到的,觉得很有提的必要)
①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;
②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;
③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY);
④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();
*
* 功能说明:使用ImageLoader时加载图片的设置
*/
public class ImageOptions {
public static DisplayImageOptions getImageOptions(int imageRes){
// 设置图片在下载期间显示的图片
DisplayImageOptions options = new DisplayImageOptions.Builder()
// .showImageOnLoading(imageRes) //正在加载时的图片
.showImageOnFail(imageRes)//加载失败的图片
.showImageForEmptyUri(imageRes) //加载失败的图片
.cacheInMemory(true) //保存至内存
.cacheOnDisk(true) //保存至SD
.imageScaleType(ImageScaleType.EXACTLY)//设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// .displayer(new FadeInBitmapDisplayer(100))// 淡入
// .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
// .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
// .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间
.build();
return options;
}
public static DisplayImageOptions getImageOptions(){
// 设置图片在下载期间显示的图片
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true) //保存至内存
.cacheOnDisk(true) //保存至SD
.imageScaleType(ImageScaleType.EXACTLY)//设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// .displayer(new FadeInBitmapDisplayer(100))// 淡入
.build();
return options;
}
}
@@ -0,0 +1,18 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.Closeable;
import java.io.IOException;
public class IoUtils {
/** 关闭流 */
public static boolean close(Closeable io) {
if (io != null) {
try {
io.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
}
@@ -0,0 +1,82 @@
/*
* Copyright (c) 2016 咖枯 <kaku201313@163.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.shangyu.gdxzExpert.utils;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import androidx.recyclerview.widget.ItemTouchHelper;
public class ItemDragHelperCallback extends ItemTouchHelper.Callback {
private OnItemMoveListener mOnItemMoveListener;
private boolean mIsLongPressEnabled;
public void setLongPressEnabled(boolean longPressEnabled) {
mIsLongPressEnabled = longPressEnabled;
}
public interface OnItemMoveListener {
boolean onItemMove(int fromPosition, int toPosition);
}
//相当于 set 设置监听 传入ChannelAdapter中的OnItemMoveListener对象
public ItemDragHelperCallback(OnItemMoveListener onItemMoveListener) {
mOnItemMoveListener = onItemMoveListener;
}
//返回true 允许拖拽
@Override
public boolean isLongPressDragEnabled() {
return mIsLongPressEnabled;
}
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
//根据recyclerView的布局,进行设置拖拽的方向
int dragFlags = setDragFlags(recyclerView);
//不允许进行滑动
int swipeFlags = 0;
return makeMovementFlags(dragFlags, swipeFlags);
}
private int setDragFlags(RecyclerView recyclerView) {
int dragFlags;
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof GridLayoutManager || layoutManager instanceof StaggeredGridLayoutManager) {
dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
} else {
dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
}
return dragFlags;
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return mOnItemMoveListener.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
}
}
@@ -0,0 +1,119 @@
package cn.shangyu.gdxzExpert.utils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import android.util.Log;
/**
* Json结果解析类
*/
public class JsonParser {
public static String parseIatResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);
JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i < words.length(); i++) {
// 转写结果词,默认使用第一个结果
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
JSONObject obj = items.getJSONObject(0);
ret.append(obj.getString("w"));
// 如果需要多候选结果,解析数组其他字段
// for(int j = 0; j < items.length(); j++)
// {
// JSONObject obj = items.getJSONObject(j);
// ret.append(obj.getString("w"));
// }
}
} catch (Exception e) {
e.printStackTrace();
}
return ret.toString();
}
public static String parseGrammarResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);
JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i < words.length(); i++) {
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
for(int j = 0; j < items.length(); j++)
{
JSONObject obj = items.getJSONObject(j);
if(obj.getString("w").contains("nomatch"))
{
ret.append("没有匹配结果.");
return ret.toString();
}
ret.append("【结果】" + obj.getString("w"));
ret.append("【置信度】" + obj.getInt("sc"));
ret.append("\n");
}
}
} catch (Exception e) {
e.printStackTrace();
ret.append("没有匹配结果.");
}
return ret.toString();
}
public static String parseLocalGrammarResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);
JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i < words.length(); i++) {
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
for(int j = 0; j < items.length(); j++)
{
JSONObject obj = items.getJSONObject(j);
if(obj.getString("w").contains("nomatch"))
{
ret.append("没有匹配结果.");
return ret.toString();
}
ret.append("【结果】" + obj.getString("w"));
ret.append("\n");
}
}
ret.append("【置信度】" + joResult.optInt("sc"));
} catch (Exception e) {
e.printStackTrace();
ret.append("没有匹配结果.");
}
return ret.toString();
}
public static String parseTransResult(String json,String key) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);
String errorCode = joResult.optString("ret");
if(!errorCode.equals("0")) {
return joResult.optString("errmsg");
}
JSONObject transResult = joResult.optJSONObject("trans_result");
ret.append(transResult.optString(key));
/*JSONArray words = joResult.getJSONArray("results");
for (int i = 0; i < words.length(); i++) {
JSONObject obj = words.getJSONObject(i);
ret.append(obj.getString(key));
}*/
} catch (Exception e) {
e.printStackTrace();
}
return ret.toString();
}
}
@@ -0,0 +1,123 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.HashMap;
import java.util.LinkedHashMap;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;
import android.widget.EditText;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
public class KeDaXunFeiUtil {
public String lastContent;
public Context ctx;
public EditText et;
RecognizerDialog mDialog;
// 语音听写对象
private SpeechRecognizer mIat;
public KeDaXunFeiUtil(Context ctx, EditText et) {
this.ctx = ctx;
this.et = et;
initVoice();
}
public void initVoice() {
// TODO Auto-generated method stub
lastContent = et.getText().toString().trim();
// 使用SpeechRecognizer对象,可根据回调消息自定义界面;
mIat = SpeechRecognizer.createRecognizer(ctx, mInitListener);
// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
mIat.setParameter(SpeechConstant.VAD_EOS, "3000");
mDialog = new RecognizerDialog(ctx, mInitListener);
mDialog.setListener(mRecognizerDialogListener);
mDialog.show();
}
/**
* 初始化监听器。
*/
private InitListener mInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d("TAG", "SpeechRecognizer init() code = " + code);
if (code != ErrorCode.SUCCESS) {
// showTip("初始化失败,错误码:" + code);
}
}
};
/**
* 听写UI监听器
*/
private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
public void onResult(RecognizerResult results, boolean isLast) {
printResult(results);
}
/**
* 识别回调错误.
*/
public void onError(SpeechError error) {
if (error.getErrorCode() == 14002) {
// showTip(error.getPlainDescription(true) + "\n请确认是否已开通翻译功能");
} else {
// showTip(error.getPlainDescription(true));
}
}
};
// 用HashMap存储听写结果
private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
private void printResult(RecognizerResult results) {
String text = JsonParser.parseIatResult(results.getResultString());
String sn = null;
// 读取json结果中的sn字段
try {
JSONObject resultJson = new JSONObject(results.getResultString());
sn = resultJson.optString("sn");
} catch (JSONException e) {
e.printStackTrace();
}
mIatResults.put(sn, text);
StringBuffer resultBuffer = new StringBuffer();
for (String key : mIatResults.keySet()) {
resultBuffer.append(mIatResults.get(key));
}
et.setText(lastContent + resultBuffer.toString());
et.setSelection(et.length());
}
public void dissDialog() {
if (mDialog.isShowing()) {
mDialog.dismiss();
}
if( null != mIat ){
// 退出时释放连接
mIat.cancel();
mIat.destroy();
}
}
}
@@ -0,0 +1,36 @@
package cn.shangyu.gdxzExpert.utils;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.HashMap;
import java.util.Map;
/**
* Created by wangchengxin on 2019/1/7.
* 添加职业地点RSA
*/
public class Keys {
private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB";
public static String getPublicKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PUBLIC_KEY);
byte[] publicKey = key.getEncoded();
return encryptBASE64(publicKey);
}
public static String encryptBASE64(byte[] key) throws Exception {
String encode = Base64Utils.encode(key);
return encode;
}
}
@@ -0,0 +1,36 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* Created by Saud on 16/2/15.
*/
public class ListViewForScrollView extends ListView {
public ListViewForScrollView(Context context) {
super(context);
}
public ListViewForScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ListViewForScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override
/**
* 重写该方法,达到使ListView适应ScrollView的效果
*/
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
@@ -0,0 +1,203 @@
/*
* Copyright (c) 2015 The CCP project authors. All Rights Reserved.
*
* Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license
* that can be found in the LICENSE file in the root of the web site.
*
* http://www.yuntongxun.com
*
* An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/package cn.shangyu.gdxzExpert.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.util.Log;
/**
* ECDemo 日志打印工具类
* Created by Jorstin on 2015/3/17.
*/
public class LogUtil {
private static boolean isPrint = true;
private static boolean isDebug = false;
public static final String TAG = "gdxzExpert_Log";
public static final String MSG = "log msg is null.";
private static List<String> logList;
static {
// isPrint = BaseApplication.getInstance().getLoggingSwitch();
}
public static void v(String tag, String msg) {
print(Log.VERBOSE, tag, msg);
}
public static void v(String msg) {
v(TAG, msg);
}
public static void d(String tag, String msg) {
print(Log.DEBUG, tag, msg);
print(isDebug, msg);
}
public static void d(String msg) {
d(TAG, msg);
}
public static void i(String tag, String msg) {
print(Log.INFO, tag, msg);
}
public static void i(String msg) {
i(TAG, msg);
}
public static void w(String tag, String msg) {
print(Log.WARN, tag, msg);
}
public static void w(String msg) {
w(TAG, msg);
}
public static void e(String tag, String msg) {
print(Log.ERROR, tag, msg);
}
public static void e(String msg) {
e(TAG, msg);
}
private static void print(int mode, final String tag, String msg) {
if (!isPrint) {
return;
}else{
if (msg == null) {
Log.e(tag, MSG);
return;
}
switch (mode) {
case Log.VERBOSE:
Log.v(tag, msg);
break;
case Log.DEBUG:
Log.d(tag, msg);
break;
case Log.INFO:
Log.i(tag, msg);
break;
case Log.WARN:
Log.w(tag, msg);
break;
case Log.ERROR:
Log.e(tag, msg);
break;
default:
Log.d(tag, msg);
break;
}
}
}
private static void print(boolean flag, String msg) {
if (flag && logList != null) {
logList.add(msg);
}
}
public static void setState(boolean flag) {
if (flag) {
if (logList == null) {
logList = new ArrayList<String>();
} else {
logList.clear();
}
} else {
if (logList != null) {
logList.clear();
logList = null;
}
}
isDebug = flag;
}
public static void printFile(InputStream is, String path) {
FileOutputStream fos = null;
byte[] temp = null;
try {
if (isPrint) {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
}
fos = new FileOutputStream(file);
temp = new byte[1024];
int i = 0;
while ((i = is.read(temp)) > -1) {
if (i < temp.length) {
byte[] b = new byte[i];
System.arraycopy(temp, 0, b, 0, b.length);
fos.write(b);
} else {
fos.write(temp);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
is = null;
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
fos = null;
}
temp = null;
}
}
public static void printErrorStackTrace(Exception ex) {
File f = new File("/sdcard/Hisun/error.log");
try {
if (!f.exists()) {
f.createNewFile();
}
ex.printStackTrace(new PrintStream(f));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getLogUtilsTag(Class<? extends Object> clazz) {
return LogUtil.TAG + "." + clazz.getSimpleName();
}
}
@@ -0,0 +1,44 @@
package cn.shangyu.gdxzExpert.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Utils {
private static String YAN = "sadw44dwddwd4w4ef4r5442366edf";
public static String md5Encrypt(String str){
try {
MessageDigest digest = MessageDigest.getInstance("md5");
byte[] bys = digest.digest((str+YAN).getBytes());
StringBuilder sb = new StringBuilder();
for(byte bb : bys){
int num = bb & 0xff;
String hex = Integer.toHexString(num);
if(hex.length() == 1){
sb.append("0");
}
sb.append(hex);
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
*
* md5Hex
* 使用Apache digest做md5加密
* @param str
* @return
* String
*/
public static String md5Hex(String str){
return DigestUtils.md5Hex(str);
}
}
@@ -0,0 +1,155 @@
package cn.shangyu.gdxzExpert.utils;
import java.math.BigDecimal;
/**
* MathUtil.java
*
* @author liufang
* @date 2015-11-6 下午4:27:34 Copyright (C) 2015 河南商宇科技有限公司
*
* 功能说明:精确计算浮点数
*/
public class MathUtil {
// 默认除法运算精度
private static final int DEF_DIV_SCALE = 4;
// 这个类不能实例化
private MathUtil() {
}
/**
* 提供精确的加法运算。
*
* @param v1
* 被加数
* @param v2
* 加数
* @return 两个参数的和
*/
public static double add(double v1, double v2) {
// if (v1 < 0 || v2 < 0) {
// return 0 ;
// }
return v1+v2;
// BigDecimal b1 = new BigDecimal(Double.toString(v1));
// BigDecimal b2 = new BigDecimal(Double.toString(v2));
// return b1.add(b2).doubleValue();
}
/**
* 提供精确的减法运算。
*
* @param v1
* 被减数
* @param v2
* 减数
* @return 两个参数的差
*/
public static double sub(double v1, double v2) {
// if (v1 < 0 || v2 < 0) {
// return 0 ;
// }
// BigDecimal b1 = new BigDecimal(Double.toString(v1));
// BigDecimal b2 = new BigDecimal(Double.toString(v2));
// return b1.subtract(b2).doubleValue();
return v1-v2;
}
/**
* 提供精确的乘法运算。
*
* @param v1
* 被乘数
* @param v2
* 乘数
* @return 两个参数的积
*/
public static double mul(double v1, double v2) {
return v1*v2;
// if (v1 < 0 || v2 < 0) {
// return 0 ;
// }
// BigDecimal b1 = new BigDecimal(Double.toString(v1));
// BigDecimal b2 = new BigDecimal(Double.toString(v2));
// return b1.multiply(b2).doubleValue();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @return 两个参数的商
*/
public static double div(double v1, double v2) {
// if (v1 < 0 || v2 < 0) {
// return 0 ;
// }
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
*
* @param v1
* 被除数
* @param v2
* 除数
* @param scale
* 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1, double v2, int scale) {
// if (v1 < 0 || v2 < 0 || scale < 0) {
// return 0 ;
// }
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
*
* @param v
* 需要四舍五入的数字
* @param scale
* 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
if (v < 0 ) {
return 0 ;
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
// public static double log(double value, double base) {
// if (Math.log(base) == 0) {
// return 0;
// }
// return Math.log(value) / Math.log(base);
// }
public static double ln(double value) {
return Math.log(value);
// if (log(value, Math.E) == 0) {
// return 0;
// }
// return log(value, Math.E);
}
}
@@ -0,0 +1,37 @@
package cn.shangyu.gdxzExpert.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Created by 12457 on 2017/8/2.
*/
public class Md5Tool {
private static String bytesToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
public static String hashKey(String key) {
String hashKey;
try {
final MessageDigest mDigest = MessageDigest.getInstance("MD5");
mDigest.update(key.getBytes());
hashKey = bytesToHexString(mDigest.digest());
} catch (NoSuchAlgorithmException e) {
hashKey = String.valueOf(key.hashCode());
}
return hashKey;
}
}
@@ -0,0 +1,115 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Debug;
import android.os.Environment;
import android.os.StatFs;
import android.text.format.Formatter;
import android.util.Log;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* Created by WANGChengXin on 2019/10/11.
*/
public class MemoryTools {
private static final String TAG = MemoryTools.class.getName();
private static final String MEM_INFO_PATH = "/proc/meminfo";
public static final String MEMTOTAL = "MemTotal";
public static final String MEMFREE = "MemFree";
/**
* 得到中内存大小
*
* @param context
* @param
* @return
*/
public static String getTotalMemory(Context context) {
return getMemInfoIype(context, MEMTOTAL);
}
/**
* 得到可用内存大小
*
* @param context
* @param
* @return
*/
public static String getMemoryFree(Context context) {
return getMemInfoIype(context, MEMFREE);
}
/**
* 得到type info
*
* @param context
* @param type
* @return
*/
public static String getMemInfoIype(Context context, String type) {
try {
FileReader fileReader = new FileReader(MEM_INFO_PATH);
BufferedReader bufferedReader = new BufferedReader(fileReader, 4 * 1024);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
if (str.contains(type)) {
break;
}
}
bufferedReader.close();
/* \\s表示 空格,回车,换行等空白符,
+号表示一个或多个的意思 */
String[] array = str.split("\\s+");
// 获得系统总内存,单位是KB,乘以1024转换为Byte
int length = Integer.valueOf(array[1]).intValue() * 1024;
return android.text.format.Formatter.formatFileSize(context, length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 得到内置存储空间的总容量
* @param context
* @return
*/
public static String getInternalToatalSpace(Context context){
String path = Environment.getDataDirectory().getPath();
Log.d(TAG,"root path is "+path);
StatFs statFs = new StatFs(path);
long blockSize = statFs.getBlockSize();
long totalBlocks = statFs.getBlockCount();
long availableBlocks = statFs.getAvailableBlocks();
long useBlocks = totalBlocks - availableBlocks;
long rom_length = totalBlocks*blockSize;
return FileUtils.formatFileSize(rom_length);
}
public static String getInternalfreeSpace(Context context){
String path = Environment.getDataDirectory().getPath();
Log.d(TAG,"root path is "+path);
StatFs statFs = new StatFs(path);
long blockSize = statFs.getBlockSize();
long totalBlocks = statFs.getBlockCount();
long availableBlocks = statFs.getAvailableBlocks();
long useBlocks = totalBlocks - availableBlocks;
long rom_length = totalBlocks*blockSize;
long free_length = availableBlocks*blockSize;
return FileUtils.formatFileSize(free_length);
}
}
@@ -0,0 +1,228 @@
package cn.shangyu.gdxzExpert.utils;
import static cn.shangyu.gdxzExpert.utils.Url.weurl;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import cn.shangyu.gdxzExpert.activity.AccumulatePointsActivity;
import cn.shangyu.gdxzExpert.activity.BindWeChatActivity;
import cn.shangyu.gdxzExpert.activity.CasediscussionActivity;
import cn.shangyu.gdxzExpert.activity.CourseActivity;
import cn.shangyu.gdxzExpert.activity.CoursewareActivity;
import cn.shangyu.gdxzExpert.activity.EditPhoneActivity;
import cn.shangyu.gdxzExpert.activity.GDLiveBroadcastActivity;
import cn.shangyu.gdxzExpert.activity.GanDanHospitalActivity;
import cn.shangyu.gdxzExpert.activity.GandanConsultActivity;
import cn.shangyu.gdxzExpert.activity.GroupingActivity;
import cn.shangyu.gdxzExpert.activity.MyAccount2Activity;
import cn.shangyu.gdxzExpert.activity.MyCicleActivity;
import cn.shangyu.gdxzExpert.activity.MyCoursewareActivity;
import cn.shangyu.gdxzExpert.activity.MyDownLoadsActivity;
import cn.shangyu.gdxzExpert.activity.MyFlowerActivity;
import cn.shangyu.gdxzExpert.activity.MyLibraryActivity;
import cn.shangyu.gdxzExpert.activity.MyPatientActivity;
import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity;
import cn.shangyu.gdxzExpert.activity.MyScientificResearchActivity;
import cn.shangyu.gdxzExpert.activity.MyWelfAreActivity;
import cn.shangyu.gdxzExpert.activity.NewsDetailActivity;
import cn.shangyu.gdxzExpert.activity.OrderListActivity;
import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity;
import cn.shangyu.gdxzExpert.activity.PublicConsultationActivity;
import cn.shangyu.gdxzExpert.activity.ResearchActivity;
import cn.shangyu.gdxzExpert.activity.SendGroupMsgListActivity;
import cn.shangyu.gdxzExpert.activity.SendMindActivity;
import cn.shangyu.gdxzExpert.activity.SettingVersionActivity;
import cn.shangyu.gdxzExpert.activity.TestingActivity;
import cn.shangyu.gdxzExpert.activity.VideoActivity;
import cn.shangyu.gdxzExpert.big.activity.BiggNewPatientActivity;
import cn.shangyu.gdxzExpert.big.activity.NormNewPatientActivity;
import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity;
import cn.shangyu.gdxzExpert.polyvplayer.MyDownLoadVideoActivity;
import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity;
/**
* Created by WANGChengXin on 2020/3/10.
*/
public class MyUserIconUtil {
public static void myIntent(Context context,String name){
if ("肝胆新闻".equals(name)||"肝胆时讯".equals(name)){
context.startActivity(new Intent(context, GandanConsultActivity.class));
}else if ("名医名科".equals(name)){
context.startActivity(new Intent(context, GanDanHospitalActivity.class));
}else if ("药品助手".equals(name)){
Intent intentwf = new Intent(context,
MyLibraryActivity.class);
intentwf.putExtra("search", "medicine");
context.startActivity(intentwf);
}else if ("肝胆课件".equals(name)){
context.startActivity(new Intent(context, CoursewareActivity.class));
}else if ("精品课程".equals(name)){
context.startActivity(new Intent(context, QualityCourseActivity.class));
}else if ("肝病学院".equals(name)){
context.startActivity(new Intent(context, GDLiveBroadcastActivity.class));
}else if ("病例讨论".equals(name)||"病例交流".equals(name)){
context.startActivity(new Intent(context, CasediscussionActivity.class));
}
else if ("病例荟萃".equals(name)||"病例分享".equals(name)){
context.startActivity(new Intent(context, MyCicleActivity.class));
}else if ("科研项目".equals(name)){
context.startActivity(new Intent(context, MyScientificResearchActivity.class));
}else if ("肝病检测".equals(name)){
context.startActivity(new Intent(context, TestingActivity.class));
}else if ("我的下载".equals(name)){
Intent intent1 = new Intent(context, MyDownLoadsActivity.class);
intent1.setType("download");
context.startActivity(intent1);
}else if ("我的福利".equals(name)){
Intent intent1 = new Intent(context, MyWelfAreActivity.class);
context.startActivity(intent1);
}else if ("精品课".equals(name)){
Intent intent1 = new Intent(context, CourseActivity.class);
context.startActivity(intent1);
}
else if("积分商城".equals(name))
{
context.startActivity(new Intent(context, PointsMallActivity.class));
// context.startActivity(new Intent(context, ResearchActivity.class));
}
else if("我的患者".equals(name))
{
context.startActivity(new Intent(context, MyPatientActivity.class));
}
else if("肝胆视频".equals(name))
{
context.startActivity(new Intent(context, VideoActivity.class));
}
else if("公益咨询".equals(name))
{
context.startActivity(new Intent(context, PublicConsultationActivity.class));
}
else if("指南杂志".equals(name)||"我的图书馆".equals(name)||"指南工具".equals(name))
{
context.startActivity(new Intent(context, MyLibraryActivity.class));
}
else if ("专题e站".equals(name)){
Intent intent1 = new Intent(context, NewsDetailActivity.class);
intent1.putExtra("url",weurl+"Esite/index.htm#/home");
// intent1.putExtra("url", "http://twx.igandan.org/Esite/index.htm#/");
// intent1.putExtra("url", "http://wx.igandan.com/Esite/index.htm#/home");
intent1.putExtra("title","专题e站");
intent1.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台");
intent1.putExtra("flag", 1);
context.startActivity(intent1);
}
else if("患者审核".equals(name))
{
if(CommonUtil.BigModule())
{
context.startActivity(new Intent(context, BiggNewPatientActivity.class));
}
else
{
context.startActivity(new Intent(context, NormNewPatientActivity.class));
}
}
else if("患者分组".equals(name))
{
context.startActivity(new Intent(context, GroupingActivity.class));
}
else if("群发消息".equals(name))
{
context.startActivity(new Intent(context, SendGroupMsgListActivity.class));
}
else if("随访二维码".equals(name))
{
context.startActivity(new Intent(context, MyQrCodeActivity.class));
}
else if("出诊计划".equals(name))
{
context.startActivity(new Intent(context, OutofPatientNoticeActivity.class));
}
else if("我的视频".equals(name))
{
context.startActivity(new Intent(context, MyDownLoadVideoActivity.class));
}
else if("我的课程".equals(name))
{
context.startActivity(new Intent(context, CourseActivity.class).putExtra("type","2"));
}
else if("我的下载".equals(name))
{
context.startActivity(new Intent(context, MyDownLoadsActivity.class).setType("download"));
}
else if("我的收藏".equals(name))
{
context.startActivity(new Intent(context, MyDownLoadsActivity.class).setType("collection"));
}
else if("我的账户".equals(name))
{
context.startActivity(new Intent(context, MyAccount2Activity.class));
}
else if("我的积分".equals(name))
{
context.startActivity(new Intent(context, AccumulatePointsActivity.class));
}
else if("我的鲜花".equals(name))
{
context.startActivity(new Intent(context, MyFlowerActivity.class));
}
else if("课件明细".equals(name))
{
context.startActivity(new Intent(context, MyCoursewareActivity.class));
}
else if("课程明细".equals(name))
{
context.startActivity(new Intent(context, OrderListActivity.class));
}
else if("送心意".equals(name))
{
context.startActivity(new Intent(context, SendMindActivity.class));
} else if(name.contains("微信"))
{
context.startActivity(new Intent(context, BindWeChatActivity.class));
} else if("更换手机号".equals(name))
{
String phone =SharePrefUtil.getString(context, "mobile", "");
context.startActivity(new Intent(context, EditPhoneActivity.class).putExtra("phone",phone));
} else if("通知已开".equals(name)||"通知已关".equals(name)||"消息提醒".equals(name))
{
if (Build.VERSION.SDK_INT >= 26) {
context.startActivity(new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
.setData(Uri.fromParts("package", context.getPackageName(), null)));
} else if (Build.VERSION.SDK_INT >= 21) {
// android 5.0-7.0
context.startActivity(new Intent().setAction("android.settings.APP_NOTIFICATION_SETTINGS")
.putExtra("app_package",context.getPackageName())
.putExtra("app_uid", context.getApplicationInfo().uid)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
} else {
// 其他
context.startActivity(new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
.setData(Uri.fromParts("package", context.getPackageName(), null))
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
else if(name.contains("V")||name.contains("版本"))
{
context.startActivity(new Intent(context, SettingVersionActivity.class));
}
else if("临床研究".equals(name))
{
// context.startActivity(new Intent(context, PointsMallActivity.class));
context.startActivity(new Intent(context, ResearchActivity.class));
}
}
}
@@ -0,0 +1,135 @@
package cn.shangyu.gdxzExpert.utils;
import android.annotation.SuppressLint;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.ContextWrapper;
import android.os.Build;
import android.util.Log;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import cn.shangyu.gdxzExpert.R;
import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager;
/**
* .
*/
public class NotificationUtils extends ContextWrapper {
private NotificationManager manager;
public String id = "随访消息";
public String name = "随访消息";
private int defaults;
private PendingIntent pendingIntent;
public NotificationUtils(Context context){
super(context);
}
public NotificationUtils(Context context, int defaults,PendingIntent pendingIntent) {
super(context);
this.defaults = defaults;
this.pendingIntent = pendingIntent;
}
@RequiresApi(api = Build.VERSION_CODES.O)
public void createNotificationChannel(){
@SuppressLint("WrongConstant") NotificationChannel channel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH);
channel.setShowBadge(true);// 打开角标
getManager().createNotificationChannel(channel);
}
private NotificationManager getManager(){
if (manager == null){
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
return manager;
}
@RequiresApi(api = Build.VERSION_CODES.O)
public Notification.Builder getChannelNotification(String title, String content){
return new Notification.Builder(getApplicationContext(), id)
.setContentTitle(title)
.setContentText(content)
.setNumber( IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient))
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pendingIntent);
}
public NotificationCompat.Builder getNotification_25(String title, String content){
return new NotificationCompat.Builder(getApplicationContext())
.setContentTitle(title)
.setContentText(content)
.setNumber( IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient))
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pendingIntent);
}
public void sendNotification(String title, String content){
id = title;
name = title;
if (Build.VERSION.SDK_INT>=26){
createNotificationChannel();
Notification notification = getChannelNotification(title, content).build();
getManager().notify(35,notification);
}else{
Notification notification = getNotification_25(title, content).build();
getManager().notify(35,notification);
}
}
public void sendUpVersonNotification(String title, String content){
id = title;
name = title;
if (Build.VERSION.SDK_INT>=26){
createNotificationChannel();
Notification notification = getChannelNotification(title, content).build();
notification.flags |= notification.FLAG_AUTO_CANCEL;
getManager().notify(35,notification);
}else{
Notification notification = getNotification_25(title, content).build();
notification.flags |= notification.FLAG_AUTO_CANCEL;
getManager().notify(35,notification);
}
}
public void sendCountNotification(String title, String content,int count){
id = title;
name = title;
Log.d("gdxzxm","title = "+title);
if (Build.VERSION.SDK_INT>=26){
createNotificationChannel();
Notification notification = getChannelNotification(title, content).build();
notification.flags |= notification.FLAG_AUTO_CANCEL;
try {
Field field = notification.getClass().getDeclaredField("extraNotification");
Object extraNotification = field.get(notification);
Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);
method.invoke(extraNotification, count);
} catch (Exception e) {
e.printStackTrace();
}
// getManager().notify(NOTIFY_ID_PUSHCONTENT,notification);
}else{
Notification notification = getNotification_25(title, content).build();
notification.flags |= notification.FLAG_AUTO_CANCEL;
try {
Field field = notification.getClass().getDeclaredField("extraNotification");
Object extraNotification = field.get(notification);
Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);
method.invoke(extraNotification, count);
} catch (Exception e) {
e.printStackTrace();
}
// getManager().notify(NOTIFY_ID_PUSHCONTENT,notification);
}
}
}
@@ -0,0 +1,46 @@
package cn.shangyu.gdxzExpert.utils;
public class OneClickUtil {
private static long lastClickTime = 0;
private static long DIFF = 1000;
private static int lastButtonId = -1;
/**
* 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
*
* @return
*/
public static boolean isFastDoubleClick() {
return isFastDoubleClick(-1, DIFF);
}
/**
* 判断两次点击的间隔,如果小于1000,则认为是多次无效点击
*
* @return
*/
public static boolean isFastDoubleClick(int buttonId) {
return isFastDoubleClick(buttonId, DIFF);
}
/**
* 判断两次点击的间隔,如果小于diff,则认为是多次无效点击
*
* @param diff
* @return
*/
public static boolean isFastDoubleClick(int buttonId, long diff) {
long time = System.currentTimeMillis();
long timeD = time - lastClickTime;
if (lastButtonId == buttonId && lastClickTime > 0 && timeD < diff) {
// Log.v("isFastDoubleClick", "短时间内按钮多次触发");
return true;
}
lastClickTime = time;
lastButtonId = buttonId;
return false;
}
}
@@ -0,0 +1,146 @@
package cn.shangyu.gdxzExpert.utils;
/**
* Created by dfqin on 2017/1/22.
*/
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import android.text.TextUtils;
import java.io.Serializable;
public class PermissionActivity extends Activity {
private static final int PERMISSION_REQUEST_CODE = 64;
private boolean isRequireCheck;
private String[] permission;
private String key;
private boolean showTip;
private PermissionsUtil.TipInfo tipInfo;
private final String defaultTitle = "帮助";
private final String defaultContent = "当前应用缺少必要权限。\n \n 请点击 \"设置\"-\"权限\"-打开所需权限。";
private final String defaultCancel = "取消";
private final String defaultEnsure = "设置";
@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent() == null || !getIntent().hasExtra("permission")) {
finish();
return;
}
isRequireCheck = true;
permission = getIntent().getStringArrayExtra("permission");
key = getIntent().getStringExtra("key");
showTip = getIntent().getBooleanExtra("showTip", true);
Serializable ser = getIntent().getSerializableExtra("tip");
if (ser == null) {
tipInfo = new PermissionsUtil.TipInfo(defaultTitle, defaultContent, defaultCancel, defaultEnsure);
} else {
tipInfo = (PermissionsUtil.TipInfo)ser;
}
}
@Override protected void onResume() {
super.onResume();
if (isRequireCheck) {
if (PermissionsUtil.hasPermission(this, permission)) {
permissionsGranted();
} else {
requestPermissions(permission); // 请求权限,回调时会触发onResume
isRequireCheck = false;
}
} else {
isRequireCheck = true;
}
}
// 请求权限兼容低版本
private void requestPermissions(String[] permission) {
ActivityCompat.requestPermissions(this, permission, PERMISSION_REQUEST_CODE);
}
/**
* 用户权限处理,
* 如果全部获取, 则直接过.
* 如果权限缺失, 则提示Dialog.
*
* @param requestCode 请求码
* @param permissions 权限
* @param grantResults 结果
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//部分厂商手机系统返回授权成功时,厂商可以拒绝权限,所以要用PermissionChecker二次判断
if (requestCode == PERMISSION_REQUEST_CODE && PermissionsUtil.isGranted(grantResults)
&& PermissionsUtil.hasPermission(this, permissions)) {
permissionsGranted();
} else if (showTip){
showMissingPermissionDialog();
} else { //不需要提示用户
permissionsDenied();
}
}
// 显示缺失权限提示
private void showMissingPermissionDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(PermissionActivity.this);
builder.setTitle(TextUtils.isEmpty(tipInfo.title) ? defaultTitle : tipInfo.title);
builder.setMessage(TextUtils.isEmpty(tipInfo.content) ? defaultContent : tipInfo.content);
builder.setNegativeButton(TextUtils.isEmpty(tipInfo.cancel) ? defaultCancel : tipInfo.cancel, new DialogInterface.OnClickListener(){
@Override public void onClick(DialogInterface dialog, int which) {
permissionsDenied();
}
});
builder.setPositiveButton(TextUtils.isEmpty(tipInfo.ensure) ? defaultEnsure : tipInfo.ensure, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
PermissionsUtil.gotoSetting(PermissionActivity.this);
}
});
builder.setCancelable(false);
builder.show();
}
private void permissionsDenied() {
PermissionListener listener = PermissionsUtil.fetchListener(key);
if (listener != null) {
listener.permissionDenied(permission);
}
finish();
}
// 全部权限均已获取
private void permissionsGranted() {
PermissionListener listener = PermissionsUtil.fetchListener(key);
if (listener != null) {
listener.permissionGranted(permission);
}
finish();
}
protected void onDestroy() {
PermissionsUtil.fetchListener(key);
super.onDestroy();
}
}
@@ -0,0 +1,23 @@
package cn.shangyu.gdxzExpert.utils;
import androidx.annotation.NonNull;
/**
* Created by dfqin on 2017/1/20.
*/
public interface PermissionListener {
/**
* 通过授权
* @param permission
*/
void permissionGranted(@NonNull String[] permission);
/**
* 拒绝授权
* @param permission
*/
void permissionDenied(@NonNull String[] permission);
}
@@ -0,0 +1,326 @@
package cn.shangyu.gdxzExpert.utils;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.shangyu.gdxzExpert.R;
/**
* Created by qianxiaoai on 2016/7/7.
*/
public class PermissionUtils {
private static final String TAG = "PermissionUtils";
public static final int CODE_RECORD_AUDIO = 0;
public static final int CODE_GET_ACCOUNTS = 1;
public static final int CODE_READ_PHONE_STATE = 2;
public static final int CODE_CALL_PHONE = 3;
public static final int CODE_CAMERA = 4;
public static final int CODE_ACCESS_FINE_LOCATION = 5;
public static final int CODE_ACCESS_COARSE_LOCATION = 6;
public static final int CODE_READ_EXTERNAL_STORAGE = 7;
public static final int CODE_WRITE_EXTERNAL_STORAGE = 8;
public static final int CODE_MULTI_PERMISSION = 100;
public static final String PERMISSION_RECORD_AUDIO = Manifest.permission.RECORD_AUDIO;
public static final String PERMISSION_GET_ACCOUNTS = Manifest.permission.GET_ACCOUNTS;
public static final String PERMISSION_READ_PHONE_STATE = Manifest.permission.READ_PHONE_STATE;
public static final String PERMISSION_CALL_PHONE = Manifest.permission.CALL_PHONE;
public static final String PERMISSION_CAMERA = Manifest.permission.CAMERA;
public static final String PERMISSION_ACCESS_FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
public static final String PERMISSION_ACCESS_COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION;
public static final String PERMISSION_READ_EXTERNAL_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE;
public static final String PERMISSION_WRITE_EXTERNAL_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;
public static final String PERMISSION_MANAGE_DOCUMENTS = Manifest.permission.MANAGE_DOCUMENTS;
public static final String EXPAND_STATUS_BAR = Manifest.permission.EXPAND_STATUS_BAR;
// public static final String PERMISSION_READ_SMS = Manifest.permission.READ_SMS;
private static String[] requestPermissions;
// private static final String[] requestPermissions = {
//// PERMISSION_RECORD_AUDIO,
//// PERMISSION_READ_CONTONTS,
//// PERMISSION_CAMERA,
//// PERMISSION_ACCESS_COARSE_LOCATION,
//// PERMISSION_READ_SMS,
// PERMISSION_READ_EXTERNAL_STORAGE,
// PERMISSION_WRITE_EXTERNAL_STORAGE,
// PERMISSION_MANAGE_DOCUMENTS
// };
public interface PermissionGrant {
void onPermissionGranted(int requestCode);
}
/**
* Requests permission.
*
* @param activity
* @param requestCode request code, e.g. if you need request CAMERA permission,parameters is PermissionUtils.CODE_CAMERA
*/
public static void requestPermission(final Activity activity, final int requestCode, PermissionGrant permissionGrant) {
if (activity == null) {
return;
}
Log.i(TAG, "requestPermission requestCode:" + requestCode);
if (requestCode < 0 || requestCode >= requestPermissions.length) {
Log.w(TAG, "requestPermission illegal requestCode:" + requestCode);
return;
}
final String requestPermission = requestPermissions[requestCode];
//如果是6.0以下的手机,ActivityCompat.checkSelfPermission()会始终等于PERMISSION_GRANTED,
// 但是,如果用户关闭了你申请的权限,ActivityCompat.checkSelfPermission(),会导致程序崩溃(java.lang.RuntimeException: Unknown exception code: 1 msg null),
// 你可以使用try{}catch(){},处理异常,也可以判断系统版本,低于23就不申请权限,直接做你想做的。permissionGrant.onPermissionGranted(requestCode);
// if (Build.VERSION.SDK_INT < 23) {
// permissionGrant.onPermissionGranted(requestCode);
// return;
// }
int checkSelfPermission;
try {
checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission);
} catch (RuntimeException e) {
Toast.makeText(activity, "please open this permission", Toast.LENGTH_SHORT)
.show();
Log.e(TAG, "RuntimeException:" + e.getMessage());
return;
}
if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED");
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) {
Log.i(TAG, "requestPermission shouldShowRequestPermissionRationale");
shouldShowRationale(activity, requestCode, requestPermission);
} else {
Log.d(TAG, "requestCameraPermission else");
ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode);
}
} else {
Log.d(TAG, "ActivityCompat.checkSelfPermission ==== PackageManager.PERMISSION_GRANTED");
Toast.makeText(activity, "opened:" + requestPermissions[requestCode], Toast.LENGTH_SHORT).show();
permissionGrant.onPermissionGranted(requestCode);
}
}
/**
*
*/
private static void requestMultiResult(Activity activity, String[] permissions, int[] grantResults, PermissionGrant permissionGrant) {
if (activity == null) {
return;
}
//TODO
Log.d(TAG, "onRequestPermissionsResult permissions length:" + permissions.length);
Map<String, Integer> perms = new HashMap<String, Integer>();
ArrayList<String> notGranted = new ArrayList<String>();
for (int i = 0; i < permissions.length; i++) {
Log.d(TAG, "permissions: [i]:" + i + ", permissions[i]" + permissions[i] + ",grantResults[i]:" + grantResults[i]);
perms.put(permissions[i], grantResults[i]);
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
notGranted.add(permissions[i]);
}
}
if (notGranted.size() == 0) {
Toast.makeText(activity, "all permission success" + notGranted, Toast.LENGTH_SHORT)
.show();
permissionGrant.onPermissionGranted(CODE_MULTI_PERMISSION);
} else {
openSettingActivity(activity, "those permission need granted!");
}
}
/**
* 一次申请多个权限
*/
public static void requestMultiPermissionsCommon(final Activity activity, final @NonNull String[] permissions, PermissionGrant grant) {
ActivityCompat.requestPermissions(activity, permissions,
CODE_MULTI_PERMISSION);
}
/**
* 一次申请多个权限
*/
public static void requestMultiPermissions(final Activity activity, PermissionGrant grant,final @NonNull String[] permissions) {
requestPermissions = permissions;
final List<String> permissionsList = getNoGrantedPermission(activity, false);
final List<String> shouldRationalePermissionsList = getNoGrantedPermission(activity, true);
//TODO checkSelfPermission
if (permissionsList == null || shouldRationalePermissionsList == null) {
return;
}
Log.d(TAG, "requestMultiPermissions permissionsList:" + permissionsList.size() + ",shouldRationalePermissionsList:" + shouldRationalePermissionsList.size());
if (permissionsList.size() > 0) {
ActivityCompat.requestPermissions(activity, permissionsList.toArray(new String[permissionsList.size()]),
CODE_MULTI_PERMISSION);
Log.d(TAG, "showMessageOKCancel requestPermissions");
} else if (shouldRationalePermissionsList.size() > 0) {
showMessageOKCancel(activity, "should open those permission",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(activity, shouldRationalePermissionsList.toArray(new String[shouldRationalePermissionsList.size()]),
CODE_MULTI_PERMISSION);
Log.d(TAG, "showMessageOKCancel requestPermissions");
}
});
} else {
grant.onPermissionGranted(CODE_MULTI_PERMISSION);
}
}
private static void shouldShowRationale(final Activity activity, final int requestCode, final String requestPermission) {
//TODO
String[] permissionsHint = activity.getResources().getStringArray(R.array.permissions);
showMessageOKCancel(activity, "Rationale: " + permissionsHint[requestCode], new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(activity,
new String[]{requestPermission},
requestCode);
Log.d(TAG, "showMessageOKCancel requestPermissions:" + requestPermission);
}
});
}
private static void showMessageOKCancel(final Activity context, String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(context)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
/**
* @param activity
* @param requestCode Need consistent with requestPermission
* @param permissions
* @param grantResults
*/
public static void requestPermissionsResult(final Activity activity, final int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults, PermissionGrant permissionGrant) {
if (activity == null) {
return;
}
Log.d(TAG, "requestPermissionsResult requestCode:" + requestCode);
if (requestCode == CODE_MULTI_PERMISSION) {
return;
}
if (requestCode < 0 || requestCode >= requestPermissions.length) {
return;
}
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
permissionGrant.onPermissionGranted(requestCode);
} else {
String[] permissionsHint = activity.getResources().getStringArray(R.array.permissions);
openSettingActivity(activity, "Result" + permissionsHint[requestCode]);
}
}
private static void openSettingActivity(final Activity activity, String message) {
showMessageOKCancel(activity, message, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Log.d(TAG, "getPackageName(): " + activity.getPackageName());
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivity(intent);
}
});
}
/**
* @param activity
* @param isShouldRationale true: return no granted and shouldShowRequestPermissionRationale permissions, false:return no granted and !shouldShowRequestPermissionRationale
* @return
*/
public static ArrayList<String> getNoGrantedPermission(Activity activity, boolean isShouldRationale) {
ArrayList<String> permissions = new ArrayList<String>();
for (int i = 0; i < requestPermissions.length; i++) {
String requestPermission = requestPermissions[i];
//TODO checkSelfPermission
int checkSelfPermission = -1;
try {
checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission);
} catch (RuntimeException e) {
Toast.makeText(activity, "please open those permission", Toast.LENGTH_SHORT)
.show();
Log.e(TAG, "RuntimeException:" + e.getMessage());
return null;
}
if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) {
Log.i(TAG, "getNoGrantedPermission ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED:" + requestPermission);
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) {
Log.d(TAG, "shouldShowRequestPermissionRationale if");
if (isShouldRationale) {
permissions.add(requestPermission);
}
} else {
if (!isShouldRationale) {
permissions.add(requestPermission);
}
Log.d(TAG, "shouldShowRequestPermissionRationale else");
}
}
}
return permissions;
}
}
@@ -0,0 +1,142 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.PermissionChecker;
import android.util.Log;
import java.io.Serializable;
import java.util.HashMap;
/**
* Created by dfqin on 2017/1/20.
*/
public class PermissionsUtil {
public static final String TAG = "PermissionGrantor";
private static HashMap<String, PermissionListener> listenerMap = new HashMap();
/**
* 申请授权,当用户拒绝时,会显示默认一个默认的Dialog提示用户
* @param activity
* @param listener
* @param permission 要申请的权限
*/
public static void requestPermission(Activity activity, PermissionListener listener, String... permission) {
requestPermission(activity, listener, permission, true, null);
}
/**
* 申请授权,当用户拒绝时,可以设置是否显示Dialog提示用户,也可以设置提示用户的文本内容
* @param activity
* @param listener
* @param permission 需要申请授权的权限
* @param showTip 当用户拒绝授权时,是否显示提示
* @param tip 当用户拒绝时要显示Dialog设置
*/
public static void requestPermission(@NonNull Activity activity, @NonNull PermissionListener listener
, @NonNull String[] permission, boolean showTip, @Nullable TipInfo tip) {
if (listener == null) {
Log.e(TAG, "listener is null");
return;
}
if (Build.VERSION.SDK_INT < 23) {
if (PermissionsUtil.hasPermission(activity, permission)) {
listener.permissionGranted(permission);
} else {
listener.permissionDenied(permission);
}
Log.e(TAG, "API level : " + Build.VERSION.SDK_INT + "不需要申请动态权限!");
return;
}
String key = String.valueOf(System.currentTimeMillis());
listenerMap.put(key, listener);
Intent intent = new Intent(activity, PermissionActivity.class);
intent.putExtra("permission", permission);
intent.putExtra("key", key);
intent.putExtra("showTip", showTip);
intent.putExtra("tip", tip);
activity.startActivity(intent);
}
/**
* 判断权限是否授权
* @param context
* @param permissions
* @return
*/
public static boolean hasPermission(@NonNull Context context, @NonNull String... permissions) {
for (String per : permissions ) {
int result = PermissionChecker.checkSelfPermission(context, per);
if ( result != PermissionChecker.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* 判断一组授权结果是否为授权通过
* @param grantResult
* @return
*/
public static boolean isGranted(@NonNull int... grantResult) {
for (int result : grantResult) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* 跳转到当前应用对应的设置页面
* @param context
*/
public static void gotoSetting(@NonNull Context context) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + context.getPackageName()));
context.startActivity(intent);
}
/**
*
* @param key
* @return
*/
static PermissionListener fetchListener(String key) {
return listenerMap.remove(key);
}
public static class TipInfo implements Serializable {
private static final long serialVersionUID = 1L;
String title;
String content;
String cancel; //取消按钮文本
String ensure; //确定按钮文本
public TipInfo ( @Nullable String title, @Nullable String content, @Nullable String cancel, @Nullable String ensure) {
this.title = title;
this.content = content;
this.cancel = cancel;
this.ensure = ensure;
}
}
}
@@ -0,0 +1,132 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class PlistHandler extends DefaultHandler {
private LinkedList<Object> list = new LinkedList<Object>();
private boolean isRootElement = false;
private boolean keyElementBegin = false;
private String key;
private StringBuffer value = new StringBuffer();
private boolean valueElementBegin = false;
private Object root;
@SuppressWarnings("unchecked")
public Map getMapResult() {
return (Map)root;
}
@SuppressWarnings("unchecked")
public List getArrayResult() {
return (List)root;
}
@Override
public void startElement(String uri, String localName, String qName,
org.xml.sax.Attributes attributes) throws SAXException {
value = new StringBuffer();
if ("plist".equals(localName)) {
isRootElement = true;
}
if ("dict".equals(localName)) {
if (isRootElement) {
list.addFirst(new HashMap());
isRootElement = !isRootElement;
} else {
ArrayList parent = (ArrayList)list.get(0);
list.addFirst(new HashMap());
parent.add(list.get(0));
}
}
if ("key".equals(localName)) {
keyElementBegin = true;
}
if ("true".equals(localName)) {
HashMap parent = (HashMap)list.get(0);
parent.put(key, true);
}
if ("false".equals(localName)) {
HashMap parent = (HashMap)list.get(0);
parent.put(key, false);
}
if ("array".equals(localName)) {
if (isRootElement) {
ArrayList obj = new ArrayList();
list.addFirst(obj);
isRootElement = !isRootElement;
} else {
HashMap parent = (HashMap)list.get(0);
ArrayList obj = new ArrayList();
list.addFirst(obj);
parent.put(key, obj);
}
}
if ("string".equals(localName)) {
valueElementBegin = true;
}
}
//@SuppressWarnings("unchecked")
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (length > 0) {
value.append(ch, start, length);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (keyElementBegin) {
key = value.toString();
//Log.d("AR native", "key:" + key);
}
if (valueElementBegin) {
if (HashMap.class.equals(list.get(0).getClass())) {
HashMap parent = (HashMap)list.get(0);
parent.put(key, value.toString());
} else if (ArrayList.class.equals(list.get(0).getClass())) {
ArrayList parent = (ArrayList)list.get(0);
parent.add(value.toString());
}
//Log.d("AR native", "value:" + value);
}
if ("plist".equals(localName)) {
;
}
if ("key".equals(localName)) {
keyElementBegin = false;
}
if ("string".equals(localName)) {
valueElementBegin = false;
}
if ("array".equals(localName)) {
root = list.removeFirst();
}
if ("dict".equals(localName)) {
root = list.removeFirst();
}
}
}
@@ -0,0 +1,379 @@
package cn.shangyu.gdxzExpert.utils;
/**
* Created by wangchengxin on 2019/1/11.
*/
import java.io.ByteArrayOutputStream;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.Cipher;
/** */
/**
* <p>
* RSA公钥/私钥/签名工具包
* </p>
* <p>
* 罗纳德·李维斯特(Ron [R]ivest)、阿迪·萨莫尔(Adi [S]hamir)和伦纳德·阿德曼(Leonard [A]dleman)
* </p>
* <p>
* 字符串格式的密钥在未在特殊说明情况下都为BASE64编码格式<br/>
* 由于非对称加密速度极其缓慢,一般文件不使用它来加密而是使用对称加密,<br/>
* 非对称加密算法可以用来对对称加密的密钥加密,这样保证密钥的安全也就保证了数据的安全
* </p>
*
* @author IceWee
* @date 2012-4-26
* @version 1.0
*/
public class RSA1Utils {
/** */
/**
* 加密算法RSA
*/
public static final String KEY_ALGORITHM = "RSA";
/** */
/**
* 签名算法
*/
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
/** */
/**
* 获取公钥的key
*/
private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB";
/** */
/**
* 获取私钥的key
*/
private static final String PRIVATE_KEY = "RSAPrivateKey";
/** */
/**
* RSA最大加密明文大小
*/
private static final int MAX_ENCRYPT_BLOCK = 117;
/** */
/**
* RSA最大解密密文大小
*/
private static final int MAX_DECRYPT_BLOCK = 128;
/** */
/**
* <p>
* 生成密钥对(公钥和私钥)
* </p>
*
* @return
* @throws Exception
*/
public static Map<String, Object> genKeyPair() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
Map<String, Object> keyMap = new HashMap<String, Object>(2);
keyMap.put(PUBLIC_KEY, publicKey);
keyMap.put(PRIVATE_KEY, privateKey);
return keyMap;
}
/** */
/**
* <p>
* 用私钥对信息生成数字签名
* </p>
*
* @param data
* 已加密数据
* @param privateKey
* 私钥(BASE64编码)
*
* @return
* @throws Exception
*/
public static String sign(byte[] data, String privateKey) throws Exception {
byte[] keyBytes = Base64Utils.decode(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initSign(privateK);
signature.update(data);
return Base64Utils.encode(signature.sign());
}
/** */
/**
* <p>
* 校验数字签名
* </p>
*
* @param data
* 已加密数据
* @param publicKey
* 公钥(BASE64编码)
* @param sign
* 数字签名
*
* @return
* @throws Exception
*
*/
public static boolean verify(byte[] data, String publicKey, String sign) throws Exception {
byte[] keyBytes = Base64Utils.decode(publicKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
PublicKey publicK = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
signature.initVerify(publicK);
signature.update(data);
return signature.verify(Base64Utils.decode(sign));
}
/** */
/**
* <P>
* 私钥解密
* </p>
*
* @param encryptedData
* 已加密数据
* @param privateKey
* 私钥(BASE64编码)
* @return
* @throws Exception
*/
public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey) throws Exception {
byte[] keyBytes = Base64Utils.decode(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, privateK);
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
byte[] decryptedData = out.toByteArray();
out.close();
return decryptedData;
}
/** */
/**
* <p>
* 公钥解密
* </p>
*
* @param encryptedData
* 已加密数据
* @param publicKey
* 公钥(BASE64编码)
* @return
* @throws Exception
*/
public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey) throws Exception {
byte[] keyBytes = Base64Utils.decode(publicKey);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicK = keyFactory.generatePublic(x509KeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, publicK);
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
byte[] decryptedData = out.toByteArray();
out.close();
return decryptedData;
}
/** */
/**
* <p>
* 公钥加密
* </p>
*
* @param data
* 源数据
* @param publicKey
* 公钥(BASE64编码)
* @return
* @throws Exception
*/
public static byte[] encryptByPublicKey(byte[] data, String publicKey) throws Exception {
byte[] keyBytes = Base64Utils.decode(publicKey);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key publicK = keyFactory.generatePublic(x509KeySpec);
// 对数据加密
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, publicK);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
return encryptedData;
}
/** */
/**
* <p>
* 私钥加密
* </p>
*
* @param data
* 源数据
* @param privateKey
* 私钥(BASE64编码)
* @return
* @throws Exception
*/
public static byte[] encryptByPrivateKey(byte[] data, String privateKey) throws Exception {
byte[] keyBytes = Base64Utils.decode(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE, privateK);
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
return encryptedData;
}
/** */
/**
* <p>
* 获取私钥
* </p>
*
* @param keyMap
* 密钥对
* @return
* @throws Exception
*/
public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PRIVATE_KEY);
return Base64Utils.encode(key.getEncoded());
}
/** */
/**
* <p>
* 获取公钥
* </p>
*
* @param keyMap
* 密钥对
* @return
* @throws Exception
*/
public static String getPublicKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PUBLIC_KEY);
return Base64Utils.encode(key.getEncoded());
}
/**
* java端公钥加密
*/
public static String encryptedDataOnJava(String data) {
try {
data = Base64Utils.encode(encryptByPublicKey(data.getBytes(), PUBLIC_KEY));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
/**
* java端私钥解密
*/
public static String decryptDataOnJava(String data, String PRIVATEKEY) {
String temp = "";
try {
byte[] rs = Base64Utils.decode(data);
temp = new String(RSA1Utils.decryptByPrivateKey(rs, PRIVATEKEY),"UTF-8"); //以utf-8的方式生成字符串
} catch (Exception e) {
e.printStackTrace();
}
return temp;
}
}
@@ -0,0 +1,358 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
/**
*
*/
public final class RSAUtils11 {
private static String RSA = "RSA";
/**
* 随机生成RSA密钥对(默认密钥长度为1024)
*
* @return
*/
public static KeyPair generateRSAKeyPair()
{
return generateRSAKeyPair(1024);
}
/**
* 随机生成RSA密钥对
*
* @param keyLength
* 密钥长度,范围:512~2048<br>
* 一般1024
* @return
*/
public static KeyPair generateRSAKeyPair(int keyLength)
{
try
{
KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA);
kpg.initialize(keyLength);
return kpg.genKeyPair();
} catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
return null;
}
}
/**
* 用公钥加密 <br>
* 每次加密的字节数,不能超过密钥的长度值除以 8 再减去 11,所以采取分段加密的方式规避
*
* @param data 需加密数据的byte数据
* @param publicKey 公钥
* @return 加密后的byte型数据
*/
public static byte[] encryptData(byte[] data, PublicKey publicKey)
{
try
{
Cipher cipher = Cipher.getInstance(RSA);
// 编码前设定编码方式及密钥
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey;
// 模长
int keyLen = rsaPublicKey.getModulus().bitLength() / 8;
int maxEncryptBlock = keyLen - 11;
//如果明文长度大于模长-11则要分组加密
int inputLen = data.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] temp;
int i = 0;
// 对数据分段加密
while (inputLen - offSet > 0) {
if (inputLen - offSet > maxEncryptBlock) {
temp = cipher.doFinal(data, offSet, maxEncryptBlock);
} else {
temp = cipher.doFinal(data, offSet, inputLen - offSet);
}
out.write(temp, 0, temp.length);
i++;
offSet = i * maxEncryptBlock;
}
byte[] encryptedData = out.toByteArray();
out.close();
// 传入编码数据并返回编码结果
return encryptedData;
} catch (Exception e)
{
e.printStackTrace();
return null;
}
}
/**
* 用私钥解密
*
* @param encryptedData 经过encryptedData()加密返回的byte数据
* @param privateKey 私钥
* @return
*/
public static byte[] decryptData(byte[] encryptedData, PrivateKey privateKey)
{
try
{
Cipher cipher = Cipher.getInstance(RSA);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKey;
// 模长
int keyLen = rsaPrivateKey.getModulus().bitLength() / 8;
int maxDecryptBlock = keyLen;//不用减11
//如果密文长度大于模长则要分组解密
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] temp;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > maxDecryptBlock) {
temp = cipher.doFinal(encryptedData, offSet, maxDecryptBlock);
} else {
temp = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(temp, 0, temp.length);
i++;
offSet = i * maxDecryptBlock;
}
byte[] decryptedData = out.toByteArray();
out.close();
return decryptedData;
} catch (Exception e)
{
e.printStackTrace();
return null;
}
}
/**
* 通过公钥byte[](publicKey.getEncoded())将公钥还原,适用于RSA算法
*
* @param keyBytes
* @return
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
public static PublicKey getPublicKey(byte[] keyBytes) throws NoSuchAlgorithmException,
InvalidKeySpecException
{
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
/**
* 通过私钥byte[]将公钥还原,适用于RSA算法
*
* @param keyBytes
* @return
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
public static PrivateKey getPrivateKey(byte[] keyBytes) throws NoSuchAlgorithmException,
InvalidKeySpecException
{
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
}
/**
* 使用N、e值还原公钥
*
* @param modulus
* @param publicExponent
* @return
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
public static PublicKey getPublicKey(String modulus, String publicExponent)
throws NoSuchAlgorithmException, InvalidKeySpecException
{
BigInteger bigIntModulus = new BigInteger(modulus);
BigInteger bigIntPrivateExponent = new BigInteger(publicExponent);
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(bigIntModulus, bigIntPrivateExponent);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
/**
* 使用N、d值还原私钥
*
* @param modulus
* @param privateExponent
* @return
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
public static PrivateKey getPrivateKey(String modulus, String privateExponent)
throws NoSuchAlgorithmException, InvalidKeySpecException
{
BigInteger bigIntModulus = new BigInteger(modulus);
BigInteger bigIntPrivateExponent = new BigInteger(privateExponent);
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(bigIntModulus, bigIntPrivateExponent);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
return privateKey;
}
/**
* 从字符串中加载公钥
*
* @param publicKeyStr
* 公钥数据字符串
* @throws Exception
* 加载公钥时产生的异常
*/
public static PublicKey loadPublicKey(String publicKeyStr) throws Exception
{
try
{
byte[] buffer = Base64Utils11.decode(publicKeyStr);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);
return (RSAPublicKey) keyFactory.generatePublic(keySpec);
} catch (NoSuchAlgorithmException e)
{
throw new Exception("无此算法");
} catch (InvalidKeySpecException e)
{
throw new Exception("公钥非法");
} catch (NullPointerException e)
{
throw new Exception("公钥数据为空");
}
}
/**
* 从字符串中加载私钥<br>
* 加载时使用的是PKCS8EncodedKeySpec(PKCS#8编码的Key指令)。
*
* @param privateKeyStr
* @return
* @throws Exception
*/
public static PrivateKey loadPrivateKey(String privateKeyStr) throws Exception
{
try
{
byte[] buffer = Base64Utils11.decode(privateKeyStr);
//X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
return (RSAPrivateKey) keyFactory.generatePrivate(keySpec);
} catch (NoSuchAlgorithmException e)
{
throw new Exception("无此算法");
} catch (InvalidKeySpecException e)
{
throw new Exception("私钥非法");
} catch (NullPointerException e)
{
throw new Exception("私钥数据为空");
}
}
/**
* 从文件中输入流中加载公钥
*
* @param in
* 公钥输入流
* @throws Exception
* 加载公钥时产生的异常
*/
public static PublicKey loadPublicKey(InputStream in) throws Exception
{
try
{
return loadPublicKey(readKey(in));
} catch (IOException e)
{
throw new Exception("公钥数据流读取错误");
} catch (NullPointerException e)
{
throw new Exception("公钥输入流为空");
}
}
/**
* 从文件中加载私钥
* @param in
* @return 私钥
* @throws Exception
*/
public static PrivateKey loadPrivateKey(InputStream in) throws Exception
{
try
{
return loadPrivateKey(readKey(in));
} catch (IOException e)
{
throw new Exception("私钥数据读取错误");
} catch (NullPointerException e)
{
throw new Exception("私钥输入流为空");
}
}
/**
* 读取密钥信息
*
* @param in
* @return
* @throws IOException
*/
private static String readKey(InputStream in) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String readLine = null;
StringBuilder sb = new StringBuilder();
while ((readLine = br.readLine()) != null)
{
if (readLine.charAt(0) == '-')
{
continue;
} else
{
sb.append(readLine);
sb.append('\r');
}
}
return sb.toString();
}
}
@@ -0,0 +1,224 @@
package cn.shangyu.gdxzExpert.utils;
import org.apache.commons.codec.binary.Base64;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
public class RSAUtils2 {
public static final String CHARSET = "UTF-8";
public static final String RSA_ALGORITHM = "RSA";
public static String publicKey1 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB";
public static String privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAO/m4+5v8euGOYcLcWsfvlxzzuaWVd6+GfhnZM/9O2msSDWsfZ6yykzQg+T8iJT63CeoQU1AHCV361zdqwj1QZ+ofeS4q7WTUYBDGyzM2Gz7YSWVSrssL0Iux8gkNRVgZdGBC/Zsqjqozv8ppxmRcR5N8ntZk5rwfa3Ezd5WlL2bAgMBAAECgYA3CVZDLkVmzg1GkPZ9J/QpC5xsxBKBHkWg+j9jg+nsbUzHm4HaNZQ5mSCZGOJQo1h8dJo+mbWbVu6VCHmjfXiHMYsQntC/BKo6m/R8RBld8Kne1xkB7rhc6ZMRtSBIGzEt+2pN1ODiCZ5wKgN5ANbWYg7g0D/g69e4syHywrSp2QJBAPyFeYc/RCRTxZa5c8x9E0ducAxCacmCiFUCVR6bOBiRmU9KPy77p8HpuIgRvX9JBfyvYASYvtaJx+Jm1g++YG0CQQDzNOmjGzGB52KbXsXy7cgJdej9wTaBKjiD3uZXjUcLOam8o/uIawMrRIc9n91vsDRc0aiRdwARJ+fydwFi/iEnAkEAyHdBqf+sndYvJt+ksTKd6nge1WynxIQurKXEYx7AIqj7dzmu/SJk5AkiKEtFD1YuPZIP/LYx0ejhWLdgunDc5QJBAL+imdZjvwbVA+XZL7DTnCOYPRZ2ADSWyCFgqa+jKq+1qAF0VOaRK9YUEVyFcz5mYVwh9+lnEy5xe1qaWwVdqVECQQCYGA4mYa6agEJFLwJXtwAFHNdf3n5OYVCKjTXlB/b3oA9FZZEq1uqVXyquW6KWK4GnJlJzP8NSxyRSBrwiElLr";
/*public static Map<String, String> createKeys(int keySize){
//为RSA算法创建一个KeyPairGenerator对象
KeyPairGenerator kpg;
try{
kpg = KeyPairGenerator.getInstance(RSA_ALGORITHM);
}catch(NoSuchAlgorithmException e){
throw new IllegalArgumentException("No such algorithm-->[" + RSA_ALGORITHM + "]");
}
//初始化KeyPairGenerator对象,密钥长度
kpg.initialize(keySize);
//生成密匙对
KeyPair keyPair = kpg.generateKeyPair();
//得到公钥
Key publicKey = keyPair.getPublic();
String publicKeyStr = Base64.encodeBase64URLSafeString(publicKey.getEncoded());
//得到私钥
Key privateKey = keyPair.getPrivate();
String privateKeyStr = Base64.encodeBase64URLSafeString(privateKey.getEncoded());
Map<String, String> keyPairMap = new HashMap<String, String>();
keyPairMap.put("publicKey", publicKeyStr);
keyPairMap.put("privateKey", privateKeyStr);
return keyPairMap;
}
*/
/**
* 得到公钥对象
* @param publicKey 密钥字符串(经过base64编码)
* @throws Exception
*/
public static RSAPublicKey getPublicKey(String publicKey) {
try {
//通过X509编码的Key指令获得公钥对象
KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(android.util.Base64.decode(publicKey.getBytes(), android.util.Base64.DEFAULT));
RSAPublicKey key = (RSAPublicKey) keyFactory.generatePublic(x509KeySpec);
return key;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 得到私钥对象
* @param privateKey 密钥字符串(经过base64编码)
* @throws Exception
*/
public static RSAPrivateKey getPrivateKey(String privateKey) {
try {
//通过PKCS#8编码的Key指令获得私钥对象
KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey.getBytes(CHARSET)));//
RSAPrivateKey key = (RSAPrivateKey) keyFactory.generatePrivate(pkcs8KeySpec);
return key;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}catch(InvalidKeySpecException e){
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 公钥加密
* @param data
* @param
* @return
*/
public static String publicEncrypt(String data){
RSAPublicKey publicKey = RSAUtils2.getPublicKey(publicKey1);
try{
Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] bytes = rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), publicKey.getModulus().bitLength());
return new String(Base64.encodeBase64(bytes), "UTF-8");
}catch(Exception e){
// throw new RuntimeException("加密字符串[" + data + "]时遇到异常", e);
System.out.println("加密字符串[" + data + "]时遇到异常");
e.printStackTrace();
return null;
}
}
/**
* 私钥解密
* @param data
* @param privateKey
* @return
*/
public static String privateDecrypt(String data, RSAPrivateKey privateKey){
try{
Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] bytes = rsaSplitCodec(cipher, Cipher.DECRYPT_MODE, Base64.decodeBase64(data.getBytes(CHARSET)), privateKey.getModulus().bitLength());
return new String(bytes, CHARSET);
}catch(Exception e){
System.out.println("解密字符串[" + data + "]时遇到异常");
return null;
}
}
/**
* 私钥加密
* @param data
* @param privateKey
* @return
*/
/* public static String privateEncrypt(String data, RSAPrivateKey privateKey){
try{
Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return Base64.encodeBase64URLSafeString(rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), privateKey.getModulus().bitLength()));
}catch(Exception e){
// throw new RuntimeException("加密字符串[" + data + "]时遇到异常", e);
System.out.println("加密字符串[" + data + "]时遇到异常");
e.printStackTrace();
return null;
}
}
*/
/**
* 公钥解密
* @param
* @param
* @return
*/
public static String publicDecrypt(String data, RSAPublicKey publicKey){
try{
Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, publicKey);
// new String(rsaSplitCodec(cipher, Cipher.DECRYPT_MODE, Base64.decodeBase64(data), publicKey.getModulus().bitLength()), CHARSET)
return null;
}catch(Exception e){
// throw new RuntimeException("解密字符串[" + data + "]时遇到异常", e);
System.out.println("解密字符串[" + data + "]时遇到异常");
e.printStackTrace();
return null;
}
}
private static byte[] rsaSplitCodec(Cipher cipher, int opmode, byte[] datas, int keySize){
int maxBlock = 0;
if(opmode == Cipher.DECRYPT_MODE){
maxBlock = keySize / 8;
}else{
maxBlock = keySize / 8 - 11;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] buff;
int i = 0;
try{
while(datas.length > offSet){
if(datas.length-offSet > maxBlock){
buff = cipher.doFinal(datas, offSet, maxBlock);
}else{
buff = cipher.doFinal(datas, offSet, datas.length-offSet);
}
out.write(buff, 0, buff.length);
i++;
offSet = i * maxBlock;
}
}catch(Exception e){
throw new RuntimeException("加解密阀值为["+maxBlock+"]的数据时发生异常", e);
}
byte[] resultDatas = out.toByteArray();
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return resultDatas;
}
// public static void main (String[] args) throws Exception {
////// Map<String, String> keyMap = RSAUtils.createKeys(1024);
////// String publicKey = keyMap.get("publicKey");
////// String privateKey = keyMap.get("privateKey");
//// String privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAO/m4+5v8euGOYcLcWsfvlxzzuaWVd6+GfhnZM/9O2msSDWsfZ6yykzQg+T8iJT63CeoQU1AHCV361zdqwj1QZ+ofeS4q7WTUYBDGyzM2Gz7YSWVSrssL0Iux8gkNRVgZdGBC/Zsqjqozv8ppxmRcR5N8ntZk5rwfa3Ezd5WlL2bAgMBAAECgYA3CVZDLkVmzg1GkPZ9J/QpC5xsxBKBHkWg+j9jg+nsbUzHm4HaNZQ5mSCZGOJQo1h8dJo+mbWbVu6VCHmjfXiHMYsQntC/BKo6m/R8RBld8Kne1xkB7rhc6ZMRtSBIGzEt+2pN1ODiCZ5wKgN5ANbWYg7g0D/g69e4syHywrSp2QJBAPyFeYc/RCRTxZa5c8x9E0ducAxCacmCiFUCVR6bOBiRmU9KPy77p8HpuIgRvX9JBfyvYASYvtaJx+Jm1g++YG0CQQDzNOmjGzGB52KbXsXy7cgJdej9wTaBKjiD3uZXjUcLOam8o/uIawMrRIc9n91vsDRc0aiRdwARJ+fydwFi/iEnAkEAyHdBqf+sndYvJt+ksTKd6nge1WynxIQurKXEYx7AIqj7dzmu/SJk5AkiKEtFD1YuPZIP/LYx0ejhWLdgunDc5QJBAL+imdZjvwbVA+XZL7DTnCOYPRZ2ADSWyCFgqa+jKq+1qAF0VOaRK9YUEVyFcz5mYVwh9+lnEy5xe1qaWwVdqVECQQCYGA4mYa6agEJFLwJXtwAFHNdf3n5OYVCKjTXlB/b3oA9FZZEq1uqVXyquW6KWK4GnJlJzP8NSxyRSBrwiElLr";
//// String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB";
////
////// System.out.println("公钥: \n\r" + publicKey);
//// System.out.println("私钥: \n\r" + privateKey);
////
//// System.out.println("公钥加密——私钥解密");
////
// }
}
@@ -0,0 +1,60 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.Context;
import android.util.Base64;
import java.io.InputStream;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
public class RsaUtils {
private static String RSA = "RSA";
private static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding";
public static byte[] encryptData(byte[] data, Context context) {
byte[] resultBytes = null;
try {
PublicKey publicKey = loadPublicKey(context);
Cipher cipher = Cipher.getInstance(ECB_PKCS1_PADDING);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
resultBytes = cipher.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
}
return resultBytes;
}
private static PublicKey loadPublicKey(Context context) throws Exception {
try {
PublicKey publicKey;
byte[] keyBytes = Base64.decode(readFile(context, "rsa_public_key.pem"), Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
} catch (Exception e) {
throw new Exception("密钥数据读取错误");
}
}
private static String readFile(Context context, String file) {
int len;
byte[] buf;
String grammar = "";
try {
InputStream in = context.getAssets().open(file);
len = in.available();
buf = new byte[len];
in.read(buf, 0, len);
grammar = new String(buf, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
return grammar;
}
}
@@ -0,0 +1,81 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
/**
* SQLdm.java
* @author 高财顺
* @date 2015-10-8 下午4:39:11
* Copyright (C) 2015 河南商宇科技有限公司
*
* 功能说明:将数据库读到文件中取
*/
public class SQLdm {
//数据库存储路径
// String filePath = "data/data/com.datab.cn/KJLibrary.db";
String filePath ;
//数据库存放的文件夹 data/data/com.main.jh 下面
// String pathStr = "data/data/com.datab.cn";
String pathStr;
SQLiteDatabase database;
public SQLiteDatabase openDatabase(Context context){
filePath=context.getFilesDir().getAbsolutePath()+"/KJLibrary.db";
File jhPath=new File(filePath);
//查看数据库文件是否存在
if(jhPath.exists()){
LogUtil.i("KJLibrary", "存在数据库");
//存在则直接返回打开的数据库
return SQLiteDatabase.openOrCreateDatabase(jhPath, null);
} else {
// 不存在先创建文件夹
pathStr=context.getFilesDir().getAbsolutePath();
// File path = new File(pathStr);
// if (path.mkdir()) {
// LogUtil.i("KJLibrary", "创建成功");
// } else {
// LogUtil.i("KJLibrary", "创建失败");
// }
try {
// 得到资源
AssetManager am = context.getAssets();
// 得到数据库的输入流
InputStream is = am.open("KJLibrary.db");
// LogUtil.i("KJLibrary", is + "");
// 用输出流写到SDcard上面
FileOutputStream fos = new FileOutputStream(jhPath);
// LogUtil.i("KJLibrary", "fos=" + fos);
LogUtil.i("KJLibrary", "jhPath=" + jhPath);
// 创建byte数组 用于1KB写一次
byte[] buffer = new byte[1024];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
// 最后关闭就可以了
fos.flush();
fos.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
// 如果没有这个数据库 我们已经把他写到SD卡上了,然后在执行一次这个方法 就可以返回数据库了
return openDatabase(context);
}
}
}
@@ -0,0 +1,84 @@
package cn.shangyu.gdxzExpert.utils;
import android.os.Environment;
import android.text.TextUtils;
import java.io.File;
import java.io.FileOutputStream;
public class SendCardUtils {
/**
*
* sendCardMessage
*
* @param to 发送给谁
* @param tittleName标题名字
* @param ext拓展字段
* @param imageUrl 图片url
* void
*/
public static void sendCardMessage(String to,String tittleName,String ext) {
final String mFileName = "Atest-" + "test" + ".card" ;
String path;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
path =Environment.getExternalStorageDirectory()+ "/Atest/";
} else{
path ="/udisk/crash/";
}
final File mDirectory = new File(path) ;
if( ! mDirectory.exists())
mDirectory.mkdir() ;
FileOutputStream mFileOutputStream;
try {
mFileOutputStream = new FileOutputStream(mDirectory + "/" + mFileName);
mFileOutputStream.write("test".getBytes());
mFileOutputStream.close() ;
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
File files = new File(path + "/" + mFileName);
String pathName = files.getAbsolutePath();
LogUtil.v("pathName=="+pathName);
if(TextUtils.isEmpty(to)) {
return ;
}
if(TextUtils.isEmpty(tittleName)) {
return ;
}
// 组建一个待发送的附件ECMessage
// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.FILE);
// // 设置接收者
// msg.setTo(to);
// // 创建附件消息体
// ECFileMessageBody msgBody = new ECFileMessageBody();
// // 设置附件
// msgBody.setFileName(tittleName);//可以随便命名
// // 设置附件扩展名
// msgBody.setFileExt("card");//储存太短,怒能做拓展属性
// // 设置附件本地路径
// msgBody.setLocalUrl(pathName);//必须得是一个文件的路径
// // 设置附件长度
// msgBody.setLength(31);//可以随便写,但是不要太大
// msgBody.setRemoteUrl(ext);//拓展字段
//
// msg.setBody(msgBody);
try {
// 调用发送API
// 发送消息,该函数见上
long rowId = -1;
// rowId = IMChattingHelper.sendECMessage(msg);
// // 通知列表刷新
// msg.setId(rowId);
} catch (Exception e) {
}
}
}
@@ -0,0 +1,36 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.ActivityManager;
import android.content.Context;
import android.util.Log;
import java.util.ArrayList;
/**
* Created by WANGChengXin on 2019/9/4.
*/
public class ServiceUtils {
/**
* 判断服务是否开启
*
* @return
*/
public static boolean isServiceRunning(Context context, String ServiceName) {
if (("").equals(ServiceName) || ServiceName == null)
return false;
ActivityManager myManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
ArrayList<ActivityManager.RunningServiceInfo> runningService = (ArrayList<ActivityManager.RunningServiceInfo>) myManager
.getRunningServices(30);
for (int i = 0; i < runningService.size(); i++) {
// Log.i("TAG","服务 = "+runningService.get(i).service.getClassName().toString());
if (runningService.get(i).service.getClassName().toString().equals(ServiceName)) {
return true;
}
}
return false;
}
}
@@ -0,0 +1,71 @@
package cn.shangyu.gdxzExpert.utils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ListAdapter;
import android.widget.ListView;
import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshGridView;
public class SetListViewHeightBasedOnChildrenUtil {
public static void SetListViewHeightBasedOnChildren(ListView listView,BaseAdapter mAdapter) {
//获取listview的适配器
ListAdapter listAdapter = listView.getAdapter(); //item的高度
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = mAdapter.getView(i, null, listView);
listItem.measure(0, 0); //计算子项View 的宽高 //统计所有子项的总高度
totalHeight += listItem.getMeasuredHeight()+listView.getDividerHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;
listView.setLayoutParams(params);
}
public static int SetListViewHeightBasedOnChildren1(ListView listView,BaseAdapter mAdapter) {
//获取listview的适配器
ListAdapter listAdapter = listView.getAdapter(); //item的高度
if (listAdapter == null) {
return 0 ;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = mAdapter.getView(i, null, listView);
listItem.measure(0, 0); //计算子项View 的宽高 //统计所有子项的总高度
totalHeight += listItem.getMeasuredHeight()+listView.getDividerHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;
listView.setLayoutParams(params);
return totalHeight;
}
public static void setGridViewHeight(PullToRefreshGridView gridview) {
// 获取gridview的adapter
ListAdapter listAdapter = gridview.getRefreshableView().getAdapter();
if (listAdapter == null) {
return;
}
// 固定列宽,有多少列
int numColumns= gridview.getRefreshableView().getNumColumns(); //5
int totalHeight = 0;
// 计算每一列的高度之和
for (int i = 0; i < listAdapter.getCount(); i += numColumns) {
// 获取gridview的每一个item
View listItem = listAdapter.getView(i, null, gridview);
listItem.measure(0, 0);
// 获取item的高度和
totalHeight += listItem.getMeasuredHeight();
}
// 获取gridview的布局参数
ViewGroup.LayoutParams params = gridview.getLayoutParams();
params.height = totalHeight;
gridview.setLayoutParams(params);
}
}
@@ -0,0 +1,311 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import android.content.Context;
import android.content.SharedPreferences;
import android.text.TextUtils;
import org.apache.commons.codec.binary.Base64;
/**
*
* 类名称:SharePrefUtil 类描述:简单方便SharePref工具类呀,常用的保存于读取,对象也可哦~ 创建人:苏三元 时间:2015-9-2
* 上午11:39:34 版权:河南商宇科技有限公司--版权所有 (c) 2015
*
*/
public class SharePrefUtil {
private final static String SP_NAME = Constant.SP_NAME;
public final static String SP_DOWN = "MYDOWN";
private final static String SP_IS_FIRST_NAME = Constant.SP_IS_FIRST_NAME;
private final static int mode = Context.MODE_PRIVATE;
private static SharedPreferences sp;
/**
*
* 类名称:KEY 类描述:自定义常量的key,方便使用 创建人:苏三元 时间:2015-9-2 上午11:41:14
* 版权:河南商宇科技有限公司--版权所有 (c) 2015
*
*/
public interface KEY {
String FUNCTION_ALL_JSON = "all_function_json";// 所有的Funcation Json
String CATE_ALL_JSON = "all_cate_json";// 所有的目录 Json
}
/**
* 保存布尔值
*
* @param context
* @param key
* @param value
*/
public static void saveBoolean(Context context, String key, boolean value) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
sp.edit().putBoolean(key, value).commit();
}
/**
* 保存是否第一次使用APP saveIsFirstBoolean
*
* @param context
* @param key
* @param value
* void
*/
public static void saveIsFirstBoolean(Context context, String key,
boolean value) {
SharedPreferences sp1 = context.getSharedPreferences(SP_IS_FIRST_NAME,
mode);
sp1.edit().putBoolean(key, value).commit();
}
/**
* 取出是否第一次使用APP getIsFirstBoolean
*
* @param context
* @param key
* @param defValue
* @return boolean
*/
public static boolean getIsFirstBoolean(Context context, String key,
boolean defValue) {
SharedPreferences sp1 = context.getSharedPreferences(SP_IS_FIRST_NAME,
mode);
return sp1.getBoolean(key, defValue);
}
/**
* 保存字符串
*
* @param context
* @param key
* @param value
*/
public static void saveString(Context context, String key, String value) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
sp.edit().putString(key, value).commit();
}
public static void saveString(Context context, String spname, String key,
String value) {
SharedPreferences sp1 = context.getSharedPreferences(spname, mode);
sp1.edit().putString(key, value).commit();
}
public static void clear(Context context) {
sp = context.getSharedPreferences(SP_NAME, mode);
sp.edit().clear().commit();
}
/**
* 清除某一个sp
*
* @param context
* @param key
*/
public static void clear(Context context, String key) {
if (sp == null)
sp = context.getSharedPreferences(SP_NAME, 0);
sp.edit().remove(key).commit();
}
/**
* 保存long型
*
* @param context
* @param key
* @param value
*/
public static void saveLong(Context context, String key, long value) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
sp.edit().putLong(key, value).commit();
}
/**
* 保存int型
*
* @param context
* @param key
* @param value
*/
public static void saveInt(Context context, String key, int value) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
sp.edit().putInt(key, value).commit();
}
/**
* 保存float型
*
* @param context
* @param key
* @param value
*/
public static void saveFloat(Context context, String key, float value) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
sp.edit().putFloat(key, value).commit();
}
/**
* 获取字符值
*
* @param context
* @param key
* @param defValue
* @return
*/
public static String getString(Context context, String key, String defValue) {
if (context == null) {
return "";
}
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
return sp.getString(key, defValue);
}
public static String getString(Context context, String spname, String key,
String defValue) {
SharedPreferences sp1 = context.getSharedPreferences(spname, mode);
return sp1.getString(key, defValue);
}
/**
* 获取int值
*
* @param context
* @param key
* @param defValue
* @return
*/
public static int getInt(Context context, String key, int defValue) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
return sp.getInt(key, defValue);
}
/**
* 获取long值
*
* @param context
* @param key
* @param defValue
* @return
*/
public static long getLong(Context context, String key, long defValue) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
return sp.getLong(key, defValue);
}
/**
* 获取float值
*
* @param context
* @param key
* @param defValue
* @return
*/
public static float getFloat(Context context, String key, float defValue) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
return sp.getFloat(key, defValue);
}
/**
* 获取布尔值
*
* @param context
* @param key
* @param defValue
* @return
*/
public static boolean getBoolean(Context context, String key,
boolean defValue) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
return sp.getBoolean(key, defValue);
}
/**
* 将对象进行base64编码后保存到SharePref中
*
* @param context
* @param key
* @param object
*/
public static void saveObj(Context context, String key, Object object) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
// 将对象的转为base64码
// Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,比如Base64, Hex,
// MD5,Phonetic and URLs等等。
String objBase64 = new String(Base64.encodeBase64(baos
.toByteArray()));
sp.edit().putString(key, objBase64).commit();
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 将SharePref中经过base64编码的对象读取出来
*
* @param context
* @param key
* @param defValue
* @return
*/
public static Object getObj(Context context, String key) {
if (sp == null) {
sp = context.getSharedPreferences(SP_NAME, mode);
}
String objBase64 = sp.getString(key, null);
if (TextUtils.isEmpty(objBase64))
return null;
// 对Base64格式的字符串进行解码
byte[] base64Bytes = Base64.decodeBase64(objBase64.getBytes());
ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
ObjectInputStream ois;
Object obj = null;
try {
ois = new ObjectInputStream(bais);
obj = (Object) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
@@ -0,0 +1,241 @@
package cn.shangyu.gdxzExpert.utils;
import static cn.shangyu.gdxzExpert.utils.CommonUtil.FROMEXPERT;
import static cn.shangyu.gdxzExpert.utils.CommonUtil.FROMEXPERT1;
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.text.TextUtils;
import com.umeng.socialize.ShareAction;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMWeb;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
public class ShareUtils {
// public final static UMSocialService mController = UMServiceFactory
// .getUMSocialService(Constant.DESCRIPTOR);
/**
* 系统分享功能
*
* @param context
* 上下文
* @param activityTitle
* Activity的名字
* @param msgTitle
* 消息标题
* @param msgText
* 消息内容
* @param imgPath
* 图片路径,不分享图片则传null
*/
public static void shareMsg(Context context, String msgTitle,
String msgText, String imgPath) {
Intent intent = new Intent(Intent.ACTION_SEND);
if (TextUtils.isEmpty(imgPath)) {
intent.setType("text/plain"); // 纯文本
} else {
File f = new File(imgPath);
if (f != null && f.exists() && f.isFile()) {
intent.setType("image/jpg");// 图片
Uri u = Uri.fromFile(f);
intent.putExtra(Intent.EXTRA_STREAM, u);
}
}
intent.putExtra(Intent.EXTRA_SUBJECT, msgTitle);
intent.putExtra(Intent.EXTRA_TEXT, msgText);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(Intent.createChooser(intent, "分享到"));
}
/**
* 友盟分享 shareUmeng
* "?fromtype=doctor"用于分享区分是患者端还是专家端
* @param context
* @param msgTitle
* @param msgText
* @param imgPath
* void
*/
public static void shareUmeng(Activity context, String msgTitle,
String msgContent, String msgSinaContent, String imgPath,
String msgUrl, Bitmap bitmap) {
// 配置需要分享的相关平台
// configPlatforms(context);
// 设置分享的内容
if(msgUrl!=null&&msgUrl.contains("?"))
{
msgUrl=msgUrl+FROMEXPERT1;
}
else
{
msgUrl=msgUrl+FROMEXPERT;
}
setShareContent(context, msgTitle, msgContent, msgSinaContent, imgPath,
msgUrl, bitmap);
}
public static void shareUmeng(Activity context, String msgTitle,
String msgContent, String msgSinaContent, String imgPath,
String msgUrl, Bitmap bitmap,SHARE_MEDIA share_media) {
// 配置需要分享的相关平台
// configPlatforms(context);
// 设置分享的内容
if(msgUrl!=null&&msgUrl.contains("?"))
{
msgUrl=msgUrl+FROMEXPERT1;
}
else
{
msgUrl=msgUrl+FROMEXPERT;
}
setShareContentcustom(context, msgTitle, msgContent, msgSinaContent, imgPath,
msgUrl, bitmap,share_media);
}
/**
* 根据不同的平台设置不同的分享内容</br>
*
* @param context
* @param imgPath
* @param msgText
* @param msgTitle
* @param msgUrl
*/
private static void setShareContent(Activity context, String msgTitle,
String msgContent, String msgSinaContent, String imgPath,
String msgUrl, Bitmap bitmap) {
UMImage shareImg;// 友盟分享的缩略图
if (TextUtils.isEmpty(msgTitle)) {
msgTitle = "";
}
if (TextUtils.isEmpty(msgContent)) {
msgContent = "";
}
if (StringUtil.isEmpty(imgPath.replace(Url.urlHtml, ""))) {
shareImg = new UMImage(context,
"http://doc.igandan.com/app/html/img/2016/20160714132557.png");
} else {
if (bitmap != null) {
shareImg = new UMImage(context, bitmap);
} else {
shareImg = new UMImage(context, imgPath);
}
}
shareImg.compressStyle = UMImage.CompressStyle.SCALE;
UMWeb web = new UMWeb(msgUrl);
web.setTitle(msgTitle);// 标题
web.setThumb(shareImg); // 缩略图
web.setDescription(msgContent);// 描述
new ShareAction(context)
.withMedia(web)
.setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,
SHARE_MEDIA.SINA)
.setCallback(new UMengShareHelper(context).shareListener)
.open();
}
private static void setShareContentcustom(Activity context, String msgTitle,
String msgContent, String msgSinaContent, String imgPath,
String msgUrl, Bitmap bitmap,SHARE_MEDIA share_media) {
UMImage shareImg;// 友盟分享的缩略图
if (TextUtils.isEmpty(msgTitle)) {
msgTitle = "";
}
if (TextUtils.isEmpty(msgContent)) {
msgContent = "";
}
if (StringUtil.isEmpty(imgPath.replace(Url.urlHtml, ""))) {
shareImg = new UMImage(context,
"http://doc.igandan.com/app/html/img/2016/20160714132557.png");
} else {
if (bitmap != null) {
shareImg = new UMImage(context, bitmap);
} else {
shareImg = new UMImage(context, imgPath);
}
}
shareImg.compressStyle = UMImage.CompressStyle.SCALE;
UMWeb web = new UMWeb(msgUrl);
web.setTitle(msgTitle);// 标题
web.setThumb(shareImg); // 缩略图
web.setDescription(msgContent);// 描述
new ShareAction(context)
.withMedia(web)
.setPlatform(share_media)
.setCallback(new UMengShareHelper(context).shareListener)
.share();
}
public static Bitmap getBitmap(String url) {
Bitmap bm = null;
try {
URL iconUrl = new URL(url);
URLConnection conn = iconUrl.openConnection();
HttpURLConnection http = (HttpURLConnection) conn;
int length = http.getContentLength();
conn.connect();
// 获得图像的字符流
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is, length);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();// 关闭流
} catch (Exception e) {
e.printStackTrace();
}
return bm;
}
// /**
// * 配置分享平台参数</br>
// *
// * @param context
// */
// private static void configPlatforms(Context context) {
// // 添加新浪SSO授权
// mController.getConfig().setSsoHandler(new SinaSsoHandler());
// // 添加微信、微信朋友圈平台
// addWXPlatform(context);
// mController.getConfig().setPlatforms(SHARE_MEDIA.WEIXIN,
// SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.SINA);
// }
// /**
// * @param context
// * @功能描述 : 添加微信平台分享
// * @return
// */
// private static void addWXPlatform(Context context) {
// // 注意:在微信授权的时候,必须传递appSecret
// // wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID
// String appId = "wxbf3658f5e674667c";// 这个填写通过的审核的APPID
// String appSecret = "c4505a04a9910c65efea8e11ffc93f92";
// // 添加微信平台
// UMWXHandler wxHandler = new UMWXHandler(context, appId, appSecret);
// wxHandler.addToSocialSDK();
// // 支持微信朋友圈
// UMWXHandler wxCircleHandler = new UMWXHandler(context, appId, appSecret);
// wxCircleHandler.setToCircle(true);
// wxCircleHandler.addToSocialSDK();
// }
}
@@ -0,0 +1,60 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.Context;
import android.net.Uri;
import android.util.Base64;
import org.json.JSONException;
import org.json.JSONObject;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class Sign {
// 固定
public static final String PARTNERID = "medicoolgandan2017";
public static String getSign(Context context, String method,
String nonce_str, LinkedHashMap<String, Object> parameters)
throws Exception {
String sign;
// JSONObject jsonObject = new JSONObject();
// String j_parameters = "";
// //对parameters进行json_encode处理
// try {
// if (parameters != null && !parameters.isEmpty()) {
// for (Map.Entry<String, Object> entry : parameters.entrySet()) {
// jsonObject.put(entry.getKey(), entry.getValue());
// }
// j_parameters = jsonObject.toString();
// }
// } catch (JSONException e) {
// e.printStackTrace();
// }
Gson gson = new Gson();
String j_parameters = gson.toJson(parameters);
// 拼接参数method=$method&nonce_str=$nonce_str&parameters=$parameters&partnerid=$partnerid
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("method=").append(method + "&")
.append("nonce_str=").append(nonce_str + "&")
.append("parameters=").append(j_parameters + "&")
.append("partnerid=" + PARTNERID);
System.out.println("stringBuffer=== " + stringBuffer);
// RSA加密
byte[] bytes = RsaUtils.encryptData(stringBuffer.toString().getBytes(),
context);
// base64_encodec
sign = Base64.encodeToString(bytes, Base64.DEFAULT);
// urlencode
sign = Uri.encode(sign);
return sign;
}
}
@@ -0,0 +1,127 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public class SignUtil {
public static String getSign(Map<String,String> map) throws UnsupportedEncodingException{
String secret=(String) map.get("timestamp");
if(secret!=null){
Set<String> keySet=map.keySet();
TreeSet<String> sortSet=new TreeSet<String>();
sortSet.addAll(keySet);
String keyValueStr="";
Iterator<String> it=sortSet.iterator();
while(it.hasNext()){
String key=it.next();
String value= map.get(key);
keyValueStr+=key+value;
}
keyValueStr = keyValueStr.replace(" ", "");
keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret);
String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr);
String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr);
return base64Str;
}else{
return "";
}
}
public static String getSign1(Map<String,String> map) throws UnsupportedEncodingException{
String secret=(String) map.get("timestamp");
if(secret!=null){
Set<String> keySet=map.keySet();
TreeSet<String> sortSet=new TreeSet<String>();
sortSet.addAll(keySet);
String keyValueStr="";
Iterator<String> it=sortSet.iterator();
while(it.hasNext()){
String key=it.next();
String value= map.get(key);
if("comment".equals(key))
{
value= map.get(key).replace(" ", "");
}
keyValueStr+=key+value;
}
keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret);
String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr);
String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr);
return base64Str;
}else{
return "";
}
}
public static String getSignObject(Map<String,Object> map) throws UnsupportedEncodingException{
String secret=(String) map.get("timestamp");
if(secret!=null){
Set<String> keySet=map.keySet();
TreeSet<String> sortSet=new TreeSet<String>();
sortSet.addAll(keySet);
String keyValueStr="";
Iterator<String> it=sortSet.iterator();
while(it.hasNext()){
String key=it.next();
Object value=map.get(key);
keyValueStr+=key+value;
}
keyValueStr = keyValueStr.replace(" ", "");
keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret);
String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr);
String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr);
return base64Str;
}else{
return "";
}
}
public static String getSignObject1(Map<String,Object> map) throws UnsupportedEncodingException{
String secret=(String) map.get("timestamp");
if(secret!=null){
Set<String> keySet=map.keySet();
TreeSet<String> sortSet=new TreeSet<String>();
sortSet.addAll(keySet);
String keyValueStr="";
Iterator<String> it=sortSet.iterator();
while(it.hasNext()){
String key=it.next();
Object value=map.get(key);
keyValueStr+=key+"="+value+"&";
}
return keyValueStr;
}else{
return "";
}
}
public static String getSignObject2(Map<String,Object> map) throws UnsupportedEncodingException{
String secret=(String) map.get("timestamp");
if(secret!=null){
Set<String> keySet=map.keySet();
TreeSet<String> sortSet=new TreeSet<String>();
sortSet.addAll(keySet);
String keyValueStr="";
Iterator<String> it=sortSet.iterator();
while(it.hasNext()){
String key=it.next();
Object value= map.get(key);
keyValueStr+=key+value;
}
keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret);
keyValueStr = keyValueStr.replaceAll("\"", "");
keyValueStr = keyValueStr.replaceAll(":","=");
keyValueStr = keyValueStr.replaceAll(" ","");
String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr);
String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr);
return base64Str;
}else{
return "";
}
}
}
@@ -0,0 +1,69 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;
import cn.shangyu.gdxzExpert.activity.LoginActivity;
@SuppressLint("NewApi")
public class SmsObserver extends ContentObserver {
private Context mContext;
private Handler mHandler;
public SmsObserver(Context context, Handler handler) {
super(handler);
mContext = context;
mHandler = handler;
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
// 短信内容变化时,第一次调用该方法时短信内容并没有写入到数据库中,return
System.out.println("bbbbbbbbbbbbbbbbbbbbbbb"+" "+uri.toString());
if (uri.toString().equals("content://sms/raw")) {
return;
}
getValidateCode();//获取短信验证码
}
/**
* 获取短信验证码
*/
private void getValidateCode() {
String code = "";
Uri inboxUri = Uri.parse("content://sms/inbox");
Cursor c = mContext.getContentResolver().query(inboxUri, new String[]{"_id", "address", "read", "body"}, null, null, "_id desc");//
if (c != null) {
if (c.moveToFirst()) {
String address = c.getString(c.getColumnIndex("address"));
String body = c.getString(c.getColumnIndex("body"));
//13162364720为发件人的手机号码
// if (!address.equals("13162364720")) {
// return;
// }
Pattern pattern = Pattern.compile("(\\d{6})");
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
code = matcher.group(0);
mHandler.obtainMessage(LoginActivity.MSG_RECEIVED_CODE, code).sendToTarget();
}
}
c.close();
}
}
}
@@ -0,0 +1,56 @@
package cn.shangyu.gdxzExpert.utils;
public class StaUtil {
//埋点统计
public static String EXPERT_TAB_HOME="EXPERT_TAB_HOME";
public static String EXPERT_TAB_HOME_STAY="EXPERT_TAB_HOME_STAY";
public static String EXPERT_TAB_TEACH="EXPERT_TAB_TEACH";
public static String EXPERT_TAB_MEETING="EXPERT_TAB_MEETING";
public static String EXPERT_TAB_EDUCATION="EXPERT_TAB_EDUCATION";
public static String EXPERT_TAB_MY="EXPERT_TAB_MY";
public static String EXPERT_HOME_SIGN_IN="EXPERT_HOME_SIGN_IN";
public static String EXPERT_HOME_SIGN_IN_ALERT_NEWS="EXPERT_HOME_SIGN_IN_ALERT_NEWS";
public static String EXPERT_HOME_SIGN_IN_AGAIN="EXPERT_HOME_SIGN_IN_AGAIN";
public static String EXPERT_HOME_MESSGAE="EXPERT_HOME_MESSGAE";
public static String EXPERT_HOME_SHUFFLING="EXPERT_HOME_SHUFFLING";
public static String EXPERT_HOME_MEETING="EXPERT_HOME_MEETING";
public static String EXPERT_HOME_MEETING_DETAILS="EXPERT_HOME_MEETING_DETAILS";
public static String EXPERT_HOME_PROJECT="EXPERT_HOME_PROJECT";
public static String EXPERT_HOME_PROJECT_CHANGE="EXPERT_HOME_PROJECT_CHANGE";
public static String EXPERT_HOME_CLASS_QUALITY="EXPERT_HOME_CLASS_QUALITY";
public static String EXPERT_HOME_CLASS_QUALITY_MORE="EXPERT_HOME_CLASS_QUALITY_MORE";
public static String EXPERT_HOME_ICON_CLASS_QUALITY="EXPERT_HOME_ICON_CLASS_QUALITY";
public static String EXPERT_TAB_EDUCATION_CLASS_QUALITY="EXPERT_TAB_EDUCATION_CLASS_QUALITY";
public static String EXPERT_CLASS_QUALITY="EXPERT_CLASS_QUALITY";
public static String EXPERT_CLASS_QUALITY_DETAILS="EXPERT_CLASS_QUALITY_DETAILS";
public static String EXPERT_MY_CLASS_QUALITY="EXPERT_MY_CLASS_QUALITY";
public static String EXPERT_MY_CLASS_QUALITY_DETAIL="EXPERT_MY_CLASS_QUALITY_DETAILS";
public static String EXPERT_PUSH_CLASS_QUALITY_DETAILS="EXPERT_PUSH_CLASS_QUALITY_DETAILS";
public static String EXPERT_CLASS_QUALITY_PAY="EXPERT_CLASS_QUALITY_PAY";
public static String EXPERT_CLASS_QUALITY_PAYING="EXPERT_CLASS_QUALITY_PAYING";
public static String EXPERT_CLASS_QUALITY_PAYING_TYPE="EXPERT_CLASS_QUALITY_PAYING_TYPE";
public static String EXPERT_CLASS_QUALITY_PAYING_STATUS="EXPERT_CLASS_QUALITY_PAYING_STATUS";
public static String EXPERT_HOME_PLAYBACK="EXPERT_HOME_PLAYBACK";
public static String EXPERT_HOME_PLAYBACK_MORE="EXPERT_HOME_PLAYBACK_MORE";
public static String EXPERT_HOME_GUIDE_CHECK="EXPERT_HOME_GUIDE_CHECK";
public static String EXPERT_HOME_GUIDE_DOWNLOAD="EXPERT_HOME_GUIDE_DOWNLOAD";
public static String EXPERT_HOME_GUIDE_MORE="EXPERT_HOME_GUIDE_MORE";
public static String EXPERT_HOME_COURSEWARE_CHECK="EXPERT_HOME_COURSEWARE_CHECK";
public static String EXPERT_HOME_COURSEWARE_MORE="EXPERT_HOME_COURSEWARE_MORE";
public static String EXPERT_HOME_ICON_COURSEWARE="EXPERT_HOME_ICON_COURSEWARE";
public static String EXPERT_TAB_EDUCATION_COURSEWARE="EXPERT_TAB_EDUCATION_COURSEWARE";
public static String EXPERT_COURSEWARE_DETAILS="EXPERT_COURSEWARE_DETAILS";
public static String EXPERT_PUSH_COURSEWARE_DETAILS="EXPERT_PUSH_COURSEWARE_DETAILS";
public static String EXPERT_COURSEWARE_LIST="EXPERT_COURSEWARE_LIST";
public static String EXPERT_OPEN_BIGVERSION="EXPERT_OPEN_BIGVERSION";
public static String EXPERT_EXIT_BIGVERSION="EXPERT_EXIT_BIGVERSION";
}
@@ -0,0 +1,17 @@
package cn.shangyu.gdxzExpert.utils;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class StreamTool {
public static byte[] readInputStream(InputStream instream) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1204];
int len = 0;
while ((len = instream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
instream.close();
return outStream.toByteArray();
}
}
@@ -0,0 +1,505 @@
package cn.shangyu.gdxzExpert.utils;
import android.text.Html;
import android.text.TextUtils;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class StringUtil {
public static String TOPIC;
public static boolean IS_PUBLISH_TOPIC = false;
public static String ReplaceLike(String Cent, String Like)
{
// Regex objRegex = new Regex(Cent);
// Cent=objRegex.replace(Cent, "<font color=\"red\">" + Like + "</font>");
Cent=Cent.replace(Like,"<font color=\"red\">" + Like + "</font>");
return Cent;
}
//只需要将半角字符转换为全角字符
public static String ToSBC(String input) {
char c[] = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == ' ') {
c[i] = '\u3000';
} else if (c[i] < '\177') {
c[i] = (char) (c[i] + 65248);
}
}
return new String(c);
}
//¥ 获取人民币符号
public static String getYen(){
return String.valueOf(Html.fromHtml("&yen"));
}
public static String fenGetYuanFormat1(String fen)
{
if(StringUtil.isEmpty(fen)||Integer.valueOf(fen)<0.0001)
{
// return getYen()+"0.00";
return "免费";
}
else
{
return getYen()+String.format("%.2f",Integer.valueOf(fen)/100.0);
}
}
public static String fenGetYuanFormat(String fen)
{
if(StringUtil.isEmpty(fen)||Integer.valueOf(fen)<0.0001)
{
return getYen()+"0.00";
// return "免费";
}
else
{
return getYen()+String.format("%.2f",Integer.valueOf(fen)/100.0);
}
}
/** 判断字符串是否有值,如果为null或者是空字符串或者只有空格或者为"null"字符串,则返回true,否则则返回false */
public static boolean isEmpty(String value) {
if (!TextUtils.isEmpty(value) && !"".equalsIgnoreCase(value.trim())
&& !"null".equalsIgnoreCase(value.trim())) {
return false;
} else {
return true;
}
}
/** 判断code不为空,不为"null",并且code不等于"1" */
public static boolean isOneToCode(String code) {
if (!TextUtils.isEmpty(code) && !"null".equalsIgnoreCase(code)
&& !"1".equals(code)) {
return true;
} else {
return false;
}
}
/**
* 判断给定字符串是否空白串 空白串是指由空格、制表符、回车符、换行符组成的字符串 若输入字符串为null或空字符串,返回true
*/
public static boolean isBland(CharSequence input) {
if (input == null || "".equals(input) || "null".equals(input))
return true;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
return false;
}
}
return true;
}
/**
* 处理空字符串
*
* @param str
* @return String
*/
public static String doEmpty(String str) {
return doEmpty(str, "");
}
/**
* 处理空字符串
*
* @param str
* @param defaultValue
* @return String
*/
public static String doEmpty(String str, String defaultValue) {
if (str == null || str.equalsIgnoreCase("null")
|| str.trim().equals("") || str.trim().equals("-请选择-")) {
str = defaultValue;
} else if (str.startsWith("null")) {
str = str.substring(4, str.length());
}
return str.trim();
}
/**
* 请选择
*/
final static String PLEASE_SELECT = "请选择...";
public static boolean notEmpty(Object o) {
return o != null && !"".equals(o.toString().trim())
&& !"null".equalsIgnoreCase(o.toString().trim())
&& !"undefined".equalsIgnoreCase(o.toString().trim())
&& !PLEASE_SELECT.equals(o.toString().trim());
}
public static boolean empty(Object o) {
return o == null || "".equals(o.toString().trim())
|| "null".equalsIgnoreCase(o.toString().trim())
|| "undefined".equalsIgnoreCase(o.toString().trim())
|| PLEASE_SELECT.equals(o.toString().trim());
}
public static boolean num(Object o) {
int n = 0;
try {
n = Integer.parseInt(o.toString().trim());
} catch (NumberFormatException e) {
e.printStackTrace();
}
if (n > 0) {
return true;
} else {
return false;
}
}
public static boolean decimal(Object o) {
double n = 0;
try {
n = Double.parseDouble(o.toString().trim());
} catch (NumberFormatException e) {
e.printStackTrace();
}
if (n > 0.0) {
return true;
} else {
return false;
}
}
/**
* 给JID返回用户名
*
* @param Jid
* @return
*/
public static String getUserNameByJid(String Jid) {
if (empty(Jid)) {
return null;
}
if (!Jid.contains("@")) {
return Jid;
}
return Jid.split("@")[0];
}
/**
* 给用户名返回JID
*
* @param jidFor
* 域名//如ahic.com.cn
* @param userName
* @return
*/
public static String getJidByName(String userName, String jidFor) {
if (empty(jidFor) || empty(jidFor)) {
return null;
}
return userName + "@" + jidFor;
}
/**
* 给用户名返回JID,使用默认域名ahic.com.cn
*
* @param userName
* @return
*/
public static String getJidByName(String userName) {
String jidFor = "swinner.com";
return getJidByName(userName, jidFor);
}
/**
* 根据给定的时间字符串,返回月 日 时 分 秒
*
* @param allDate
* like "yyyy-MM-dd hh:mm:ss SSS"
* @return
*/
public static String getMonthTomTime(String allDate) {
return allDate.substring(5, 19);
}
/**
* 根据给定的时间字符串,返回月 日 时 分 月到分钟
*
* @param allDate
* like "yyyy-MM-dd hh:mm:ss SSS"
* @return
*/
public static String getMonthTime(String allDate) {
return allDate.substring(5, 16);
}
/**
*
* 将一个字符串转化为输入流
*/
public static InputStream getStringStream(String sInputString) {
if (sInputString != null && !sInputString.trim().equals("")) {
try {
ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(
sInputString.getBytes());
return tInputStringStream;
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
/**
*
* 将一个输入流转化为字符串
*/
public static String getStreamString(InputStream tInputStream) {
if (tInputStream != null) {
try {
BufferedReader tBufferedReader = new BufferedReader(
new InputStreamReader(tInputStream));
StringBuffer tStringBuffer = new StringBuffer();
String sTempOneLine = new String("");
while ((sTempOneLine = tBufferedReader.readLine()) != null) {
tStringBuffer.append(sTempOneLine);
}
return tStringBuffer.toString();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
/**
* unicode转码
*
* @param theString
* @return
*/
public static String decodeUnicode(String theString) {
char aChar;
int len = theString.length();
StringBuffer outBuffer = new StringBuffer(len);
for (int x = 0; x < len;) {
aChar = theString.charAt(x++);
if (aChar == '\\') {
aChar = theString.charAt(x++);
if (aChar == 'u') {
// Read the xxxx
int value = 0;
for (int i = 0; i < 4; i++) {
aChar = theString.charAt(x++);
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + aChar - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + aChar - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + aChar - 'A';
break;
default:
throw new IllegalArgumentException(
"Malformed \\uxxxx encoding.");
}
}
outBuffer.append((char) value);
} else {
if (aChar == 't')
aChar = '\t';
else if (aChar == 'r')
aChar = '\r';
else if (aChar == 'n')
aChar = '\n';
else if (aChar == 'f')
aChar = '\f';
outBuffer.append(aChar);
}
} else
outBuffer.append(aChar);
}
return outBuffer.toString();
}
/***
*
* @param input
* : 银行卡号,例如"6225880137706868"
* @return
*/
public static String formBankCard(String input) {
// String result = input.replaceAll("([\\d]{4})(?=\\d)", "$1 ");
String temp = "";
int len = input.length();
switch (len) {
case 16:
temp = input.substring(0, 4).concat("********")
.concat(input.substring(12));
break;
case 17:
case 18:
case 19:
temp = input.substring(0, 4).concat("************")
.concat(input.substring(16));
break;
default:
String moddle = "";
for (int i = 0, j = len - 8; i < j; i++) {
moddle += "*";
}
temp = input.substring(0, 4).concat(moddle)
.concat(input.substring(len - 4));
break;
}
String result = temp.replaceAll("([\\d]|[*]){4}(?!$)", "$0 ");
return result;
}
/***
*
* @param input
* : 银行卡号,例如"6225880137706868" : 银行卡号,例如"***********06868"
* @return
*/
public static String formBankCardBefore(String input) {
// String result = input.replaceAll("([\\d]{4})(?=\\d)", "$1 ");
String temp = "";
int len = input.length();
switch (len) {
case 16:
temp = input.substring(0, 0).concat("************")
.concat(input.substring(12));
break;
case 17:
case 18:
case 19:
temp = input.substring(0, 0).concat("****************")
.concat(input.substring(15));
break;
default:
String moddle = "";
for (int i = 0, j = len - 8; i < j; i++) {
moddle += "*";
}
temp = input.substring(0, 4).concat(moddle)
.concat(input.substring(len - 4));
break;
}
String result = temp.replaceAll("([\\d]|[*]){4}(?!$)", "$0 ");
return result;
}
public static int getnum() {
Random random = new Random();// 定义随机类
int result = random.nextInt(9);// 返回[0,9)集合中的整数,注意不包括9
return result + 1; // +1后,[0,9)集合变为[1,10)集合,满足要求
}
public static String getRandomString(int length) {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(62);
sb.append(str.charAt(number));
}
return sb.toString();
}
/**
* string 分隔
* @param content
* @param len
* @param k 最大分隔k组
* @return
*/
public static ArrayList<String> stringArray(String content, int len,int k){ //字符串对象,分割长度
int length = content.length();
List<String> list = new ArrayList<String>();
//进行判断,切割的字符串长度是否能够整除切割长度
if(length%len != 0){
int i=0;
for(;i<length/len&&i<k;i++){
String newContent = content.substring(i*len, (i+1)*len);//生成新的字符串
list.add(newContent);//添加至list集合
}
if(i<k)
{
list.add(content.substring(length/len*len, length%len+length/len*len));
}
}else{
for(int j=0;j<length/len&&j<k;j++){
String newContent = content.substring(j*len, (j+1)*len);
list.add(newContent);
}
}
return (ArrayList<String>) list;
}
}
@@ -0,0 +1,107 @@
package cn.shangyu.gdxzExpert.utils;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Created by wangchengxin on 2018/12/13.
* 判断文件完整性
*/
public class TikaUtil {
// public static boolean isFileintact(File file){
// try {
// Tika tika = new Tika();
// tika.parseToString(file);
// //System.out.println(sb);
// return true;
// } catch (TikaException e) {
// e.printStackTrace();
// return false;
// } catch (Exception e) {
// e.printStackTrace();
//
// return false;
// }
// }
/**
* get file md5
* @param file
* @return
* @throws NoSuchAlgorithmException
* @throws IOException
*/
public static String getFileMD5(File file) {
if (!file.isFile()) {
return null;
}
MessageDigest digest;
FileInputStream in;
byte buffer[] = new byte[1024];
int len;
try {
digest = MessageDigest.getInstance("MD5");
in = new FileInputStream(file);
while ((len = in.read(buffer, 0, 1024)) != -1) {
digest.update(buffer, 0, len);
}
in.close();
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String getMD5Three(String path) {
File file = new File(path);
String value = null;
FileInputStream in = null;
try {
in = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(byteBuffer);
BigInteger bi = new BigInteger(1, md5.digest());
value = bi.toString(16);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println(value);
return value;
}
}
@@ -0,0 +1,98 @@
/*
* Copyright (c) 2015 The CCP project authors. All Rights Reserved.
*
* 苏三元
* 河南商宇
* An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/package cn.shangyu.gdxzExpert.utils;
import android.os.Handler;
import android.os.Looper;
import android.widget.Toast;
public class ToastUtil {
private static Handler handler = new Handler(Looper.getMainLooper());
private static Toast toast = null;
private static Object synObj = new Object();
public static void showMessage(final String msg) {
showMessage(msg, Toast.LENGTH_SHORT);
}
/**
* 根据设置的文本显示
* @param msg
*/
public static void showMessage(final int msg) {
showMessage(msg, Toast.LENGTH_SHORT);
}
/**
* 显示一个文本并且设置时长
* @param msg
* @param len
*/
public static void showMessage(final CharSequence msg, final int len) {
if (msg == null || msg.equals("")) {
LogUtil.w("[ToastUtil] response message is null.");
return;
}
handler.post(new Runnable() {
@Override
public void run() {
synchronized (synObj) { //加上同步是为了每个toast只要有机会显示出来
if (toast != null) {
//toast.cancel();
toast.setText(msg);
toast.setDuration(len);
} else {
toast = Toast.makeText(UIUtils.getContext(), msg, len);
}
toast.show();
}
}
});
}
/**
* 资源文件方式显示文本
* @param msg
* @param len
*/
public static void showMessage(final int msg, final int len) {
handler.post(new Runnable() {
@Override
public void run() {
synchronized (synObj) {
if (toast != null) {
//toast.cancel();
toast.setText(msg);
toast.setDuration(len);
} else {
toast = Toast.makeText(UIUtils.getContext(), msg, len);
}
toast.show();
}
}
});
}
/**
*
* 创建一个新的实例 CustomToast.
* @param context 上下文
* @param text 吐司内容
* @param time 显示时间LENGTH_LONG=1或者LENGTH_SHORT=0
*/
public static void showToast(String msg){
// new CustomToast(UIUtils.getContext(),msg,0);
showMessage(msg, Toast.LENGTH_SHORT);
}
}
@@ -0,0 +1,217 @@
package cn.shangyu.gdxzExpert.utils;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.view.View;
import android.widget.Toast;
import java.util.List;
import cn.shangyu.gdxzExpert.application.BaseApplication;
/**
*
* UIUtils.java
* @author gaofei
* @date 2015-8-31 上午9:54:49
* Copyright (C) 2015 河南商宇科技有限公司
*
* 功能说明:一些基本的工具类,1、获取上下文 2、得到主线程id以及主线程 3、得到handler 4、获取资源文件
* 6、把资源id转化为string,7、把资源id转化为drawable 8、把资源id转化为stringArray 9、dip--->px 10、px---->dp
* 11、java代码区设置颜色选择器的方法 12、资源id获得颜色 14、检测网络是否可用 15 、检测Sdcard是否存在
*
* 等等。
*/
public class UIUtils {
private static Toast mToast;
//得到上下文
public static Context getContext(){
return BaseApplication.getContext();
}
//得到主线程id
public static int getMainThreadId(){
return BaseApplication.getMainThreadId();
}
//得到主线程
public static Thread getMainThread(){
return BaseApplication.getMainThread();
}
//得到handler
public static Handler getHandler(){
return BaseApplication.getHandler();
}
//把资源id转化为string
public static String getString(int id){
return getContext().getString(id);
}
//把资源id转化为drawable
public static Drawable getDrawable(int id){
return getContext().getResources().getDrawable(id);
}
//把资源id转化为stringArray
public static String[] getStringArray(int id){
return getContext().getResources().getStringArray(id);
}
//dip--->px 1dp = 1px 1dp = 2px
public static int dip2px(int dip){
//dp和px的转换关系比例值
float density = getContext().getResources().getDisplayMetrics().density;
return (int)(dip*density+0.5);
}
//px---->dp
public static int px2dip(int px){
//dp和px的转换关系比例值
float density = getContext().getResources().getDisplayMetrics().density;
return (int)(px/density+0.5);
}
//判断是否是主线的方法
public static boolean isRunInMainThread(){
return getMainThreadId() == android.os.Process.myTid();
}
/**
* 在主线程执行runnable
*/
public static boolean post(Runnable runnable) {
return getHandler().post(runnable);
}
//保证当前的UI操作在主线程里面运行
public static void runInMainThread(Runnable runnable){
if(isRunInMainThread()){
//如果现在就是在珠现场中,就直接运行run方法
runnable.run();
}else{
//否则将其传递到主线程中运行
post(runnable);
}
}
//java代码区设置颜色选择器的方法
public static ColorStateList getColorStateList(int mTabTextColorResId) {
return getContext().getResources().getColorStateList(mTabTextColorResId);
}
/**
* 把xml文件转化为view
*
*/
public static View inflate(int id){
return View.inflate(getContext(), id, null);
}
public static int getDimens(int id) {
//根据dimens中提供的id,将其对应的dp值转换成相应的像素值大小
return UIUtils.getContext().getResources().getDimensionPixelSize(id);
}
public static void postDelayed(Runnable runnable,long delayTime) {
getHandler().postDelayed(runnable, delayTime);
}
public static void removeCallback(Runnable runnable) {
//移除在当前handler中维护的任务(传递进来的任务)
getHandler().removeCallbacks(runnable);
}
/**
* 资源id获得颜色
*
*/
public static int getColor(int id) {
return getContext().getResources().getColor(id);
}
/**
*
* @author gaofei
* @date 2015-9-6 下午7:41:31
*
* 功能说明:检测网络是否可用
*/
public static boolean isNetWorkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
/**
*
* @author gaofei
* @date 2015-9-6 下午7:41:31
*
* 功能说明:检测Sdcard是否存在
*/
public static boolean isExitsSdcard() {
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
return true;
else
return false;
}
/**
*
* isLogined
* 判断是否登录,以后要加上容联的,以及自动登录需要考虑,现在只是简单读取sp文件
* true表示已登录
* @return
* boolean
*/
public static boolean isLogined() {
// TODO Auto-generated method stub
return SharePrefUtil.getBoolean(getContext(), Constant.IS_LOGIN, false);
}
public static boolean isBackground() {
ActivityManager activityManager = (ActivityManager) getContext()
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals( getContext() .getPackageName())) {
/*
BACKGROUND=400 EMPTY=500 FOREGROUND=100
GONE=1000 PERCEPTIBLE=130 SERVICE=300 ISIBLE=200
*/
// LogUtil.i( getContext() .getPackageName(), "appimportace ="
// + appProcess.importance
// + ",context.getClass().getName()="
// + getContext() .getClass().getName());
if (appProcess.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
// LogUtil.i( getContext() .getPackageName(), "处于后台"
// + appProcess.processName);
return true;
} else {
// LogUtil.i( getContext() .getPackageName(), "处于前台"
// + appProcess.processName);
return false;
}
}
}
return false;
}
// public static Boolean isActivityBackground()
// {
// ActivityManager manager = (ActivityManager)getContext().getSystemService(Context.ACTIVITY_SERVICE);
// ActivityManager.RunningTaskInfo info = manager.getRunningTasks(1).get(0);
// String shortClassName = info.topActivity.getShortClassName(); // 类名
// String className = info.topActivity.getClassName(); // 完整类名
// String packageName = info.topActivity.getPackageName(); // 包
// return true;
// }
}
@@ -0,0 +1,73 @@
package cn.shangyu.gdxzExpert.utils;
import android.content.Context;
import android.widget.Toast;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import java.util.HashMap;
import java.util.Map;
public class UMengShareHelper {
// 友盟6.4.5分享的帮助类
private Context mContext;
public UMengShareHelper(Context context) {
this.mContext = context;
}
public UMShareListener shareListener = new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param platform
* 平台类型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @descrption 分享成功的回调
* @param platform
* 平台类型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
if (Constant.isShareGetPoint) {
Map<String, String> param = new HashMap<>();
param.put("score_type","5");
HttpMD5SendInfoUtil.sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, mContext);
}
Toast.makeText(mContext, "分享成功", Toast.LENGTH_LONG).show();
Constant.isShareGetPoint = false;
}
/**
* @descrption 分享失败的回调
* @param platform
* 平台类型
* @param t
* 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(mContext, "分享失败" + t.getMessage(), Toast.LENGTH_LONG)
.show();
Constant.isShareGetPoint = false;
}
/**
* @descrption 分享取消的回调
* @param platform
* 平台类型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(mContext, "分享取消", Toast.LENGTH_LONG).show();
Constant.isShareGetPoint = false;
}
};
}
@@ -0,0 +1,337 @@
package cn.shangyu.gdxzExpert.utils;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import com.github.dfqin.grantor.PermissionListener;
import com.github.dfqin.grantor.PermissionsUtil;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.HttpHandler;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import androidx.annotation.NonNull;
import cn.shangyu.gdxzExpert.BuildConfig;
import cn.shangyu.gdxzExpert.R;
import cn.shangyu.gdxzExpert.bean.VersionBean;
import cn.shangyu.gdxzExpert.http.HttpHelper;
import cn.shangyu.gdxzExpert.ui.CustomProgressDialog;
import cn.shangyu.gdxzExpert.widget.ECAlertDialog;
public class UpdateVersionUtils {
private static String des = null;// 版本描述
private static String apkurl = null;// 新版本url
private static String version;// 版本
public static CustomProgressDialog dialog;
private static ECAlertDialog buildAlert;
private static Context ct;
/**
* 检查更新
*
* @param
*/
public static void checkUpdate(Context context, final String url, final boolean isShowProgressDialog) {
ct = context;
if (0 == CommonUtil.isNetworkAvailable(context)) {
ToastUtil.showToast("无网络,请检查网络连接!");
return;
}
if (isShowProgressDialog) {
dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(context, "检查更新中...");
dialog.show();
}
RequestParams params = new RequestParams();
params.addBodyParameter("appType", String.valueOf(1));// 1专家端 2患者端 必填
params.addBodyParameter("sysType", String.valueOf(1));// 1.android 2.ios
// 必填
HttpHelper.loadData(HttpMethod.POST, url, params,
new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> arg0) {
// TODO Auto-generated method stub
LogUtil.i("数据请求成功: " + arg0.result);
checkIsUpdate(arg0.result,isShowProgressDialog);
}
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
LogUtil.i("检查更新失败了: " + arg1);
if (isShowProgressDialog) {
ToastUtil.showToast("检查更新失败,请稍候再试");
}
}
});
}
private static void checkIsUpdate(String result, boolean isShowProgressDialog) {
// TODO Auto-generated method stub
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
VersionBean versionBean = GsonTools.fromGsonToBean(result, VersionBean.class);
String code = versionBean.code;
String message = versionBean.message;
if ("1".equals(code)) {
if (versionBean.data == null) {
if (isShowProgressDialog) {
ToastUtil.showToast("当前为最新版本无需更新");
}
return;
}
version = versionBean.data.version;
des = versionBean.data.intro;
apkurl = versionBean.data.path;
if (!StringUtil.isEmpty(version)) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(version);
if(!isNum.matches()){
if (isShowProgressDialog) {
ToastUtil.showToast("当前为最新版本无需更新");
}
return;
}
}
if (StringUtil.isEmpty(version) || StringUtil.isEmpty(apkurl) || getVerCode() == -1 || getVerCode() >= Long.parseLong(version)) {
// 版本一致,没有新版本,
if (isShowProgressDialog) {
ToastUtil.showToast("当前为最新版本无需更新");
}
} else {
// 有新版本,弹出一升级对话框
if (getVerCode() < Long.parseLong(version)) {
showUpdateDialog();
}
// showUpdateDialog();
}
} else {
ToastUtil.showToast(message);
}
}
private static void showUpdateDialog() {
if (StringUtil.isEmpty(des)) {
des = "有新的版本,是否更新?";
}
buildAlert = ECAlertDialog.buildAlert(ct, des,
"下次再说", "后台升级", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {// 取消
// TODO Auto-generated method stub
buildAlert.dismiss();
}
}, new DialogInterface.OnClickListener() {// 下载升级
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (com.github.dfqin.grantor.PermissionsUtil.hasPermission(ct, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 下载
downloadApp();
} else {
PermissionsUtil.requestPermission((Activity)ct, new PermissionListener() {
@Override
public void permissionGranted(@NonNull String[] permissions) {
// 下载
downloadApp();
}
@Override
public void permissionDenied(@NonNull String[] permissions) {
//用户拒绝了访问读写的申请
//
}
}, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE});
}
} else {
// 下载
downloadApp();
}
}
});
buildAlert.setTitle(R.string.app_tip);
buildAlert.setCanceledOnTouchOutside(false);
buildAlert.show();
}
private static HttpHandler<File> hand;
private static int progress = 0;
private static void downloadApp() {
// 下载apk,并且安装
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// sdcard存在
HttpUtils http = new HttpUtils();
//下载的路径,及app安装包的命名
//***************************************************
hand = http.download(apkurl, Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/gdxzExpert/app" + "/gdxzExpert_" + version + ".apk",
false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。
false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
new RequestCallBack<File>() {
@Override
public void onStart() {
ToastUtil.showToast("后台下载中,下载完成自动安装。");
// 显示更新进度对话框
// updateDialog();
}
@Override
public void onLoading(long total, long current,
boolean isUploading) {
progress = (int) (current * 100 / total);
LogUtil.i("下载进度:"+progress);
// 设置进度值
// setDialogProgress(progress);
}
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
ToastUtil.showToast("下载成功!");
installAPK(responseInfo.result);
}
@Override
public void onFailure(HttpException error, String msg) {
// ToastUtil.showToast("下载失败!");
//maybe the file has downloaded completely
// if (msg.contains("maybe the file has downloaded completely")) {
//
// }
LogUtil.i("下载失败:"+error+msg);
}
});
} else {
ToastUtil.showToast("SD卡已拔出,无法下载");
return;
}
}
/**
* 设置进度 setProgress
*
* @param progress
* void
*/
private void setDialogProgress(int progress) {
// TODO Auto-generated method stub
DialogUtil.setMessage("正在下载,已完成" + progress + "%");
DialogUtil.setProgress(progress);
}
/**
* 显示下载升级进度的对话框 updateDialog
*
* void
*/
private void updateDialog() {
// TODO Auto-generated method stub
DialogUtil.getMyProDialog(ct, "取消下载", "正在下载,已完成"
+ progress + "%", new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 调用cancel()方法停止下载
hand.cancel();
}
});
}
// 安装APK
private static void installAPK(File t) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(t),
"application/vnd.android.package-archive");
ct.startActivity(intent);
}
/**
* 得到应用程序的版本
*/
public static String getVersionName() {
// try {
// 管理手机的APP
// PackageManager packageManager = UIUtils.getContext().getPackageManager();
// 得到APP功能清单文件
// PackageInfo info = packageManager.getPackageInfo(UIUtils.getContext().getPackageName(), 0);
return BuildConfig.VERSION_NAME;
// } catch (NameNotFoundException e) {
// e.printStackTrace();
// }
// return null;
}
/**
* 得到应用程序的版本
*/
public static int getVerCode() {
// int verCode = -1;
// try {
// // 管理手机的APP
// PackageManager packageManager = UIUtils.getContext().getPackageManager();
// // 得到APP功能清单文件
// PackageInfo info = packageManager.getPackageInfo(UIUtils.getContext().getPackageName(), 0);
return BuildConfig.VERSION_CODE;
// } catch (NameNotFoundException e) {
// e.printStackTrace();
// }
// return verCode;
}
/**
* 判断新的版本是否大于当前版本
* */
public static boolean isUpdataInfo(String versionName,String newVersion){
String[] split = versionName.split("\\.");
String[] split1 = newVersion.split("\\.");
int i = Integer.parseInt(split[0]);
int i1 = Integer.parseInt(split1[0]);
int j = Integer.parseInt(split[1]);
int j1 = Integer.parseInt(split1[1]);
int k = Integer.parseInt(split[2]);
int k1 = Integer.parseInt(split1[2]);
if (i1>i){
return true;
}else if (j1>j&&i1>=i){
return true;
}else if (k1>k&&j1>=j&&i1>=i){
return true;
}else
return false;
}
}
@@ -0,0 +1,726 @@
package cn.shangyu.gdxzExpert.utils;
/**
* Url.java
*
* 功能说明:存放url
*/
public class Url {
// 肝胆服务器正式地址
//记得把上报地址切到正式
public static String urlimage = "http://app.igandan.com/app/";// ceshi2短信验证码
public static String urlapp = "http://app.igandan.com/app/expertApp/";// 正式外网地址
public static String url = "http://app.igandan.com/app/expert/";// 正式外网地址 v
public static String weurl = "https://wx.igandan.com/";// 微信服务器地址
public static String urlping = "http://app.igandan.com//app/pingExpert/";//
public static String urlping2 = "http://app.igandan.com//app/pingExpertV2/";//ping2
public static String getzcxy = "http://app.igandan.com/expert_zcxy.jsp";// 注册协议正式地址
public static String getyyzc="https://doc.igandan.com/app/integral/permission_expert.html";//隐私政策
public static String urlHtml = "http://doc.igandan.com/app/";// 静态资源访问地址( 图片、html等)正式地址
public static String CrashUpload = "http://app.igandan.com/app/upload/uploadExpert";// 崩溃日志上传正式 地址
public static String YKMedicionURl = "http://extraapi.meditool.cn/";// 医库用药网址
public static String getpushChat = "http://wx.igandan.com/api/pushChat";// 微信推送
public static String urlmyLan = "https://app.igandan.com/app/expertAPI/";//迈兰
public static String qrCode = "http://wx.igandan.com/expert/expertcodeimg?expert_uuid=";//专家二维码页面分享链接:
public static String urlOutpatient = "http://wx.igandan.com/expert/outpatient_details?expert_uuid=";//门诊详情连接:http://wx.igandan.com/expert/outpatient_details?expert_uuid=
public static String url_path = "https://app.igandan.com/app";
public static String videodetailURL = "http://wx.igandan.com/video/hcp_detial?share=1&uuid=";
public static String polvId = "21";//保利威视学员id
public static String scanurl = "https://wx.igandan.com/watchlive/sendWebsocketMsg";
public static String zhibourl = weurl+"hcp/setInfo";
public static String homeModalurl = urlmyLan+"homemodal";
public static String PHP ="https://prod.hospital.open.igandanyiyuan.com";// php接口 互联网医院相关
public static String modernHepatology="https://oss.igandan.com";//常用医学工具
public static String appkey ="a1e5d9ca1d3fbae69532f134bf6cdee9";
public static String appId ="1000001";
public static String FileUrl="https://event.igandan.com/v1/eventLog/upload";//正式环境
public static String youanapi ="https://yaylt.igandan.com/api";
// 肝胆测试服务器地址
// public static String urlimage = "https://dev-app.igandan.com/app/";// ceshi2短信验证码
// public static String urlapp = "https://dev-app.igandan.com//app/expertApp/";// ceshi2地址
// public static String urlping = "https://dev-app.igandan.com//app/pingExpert/";//ping
// public static String urlping2 = "https://dev-app.igandan.com//app/pingExpertV2/";//ping2
// public static String url = "https://dev-app.igandan.com//app/expert/";// ceshi2地址
// public static String weurl = "https://dev-wx.igandan.com/";// 微信服务器地址
// public static String getzcxy = "http://app.igandan.com/expert_zcxy.jsp";// 注册协议正式地址
// public static String getyyzc="https://doc.igandan.com/app/integral/permission_expert.html";//隐私政策
// public static String urlHtml = "http://dev-doc.igandan.com/app/";// 静态资源访问地址(图片、html等)ceshi2
// public static String CrashUpload = "https://dev-app.igandan.com/app/upload/uploadExpert";// 崩溃日志上传ceshi2
// public static String YKMedicionURl = "http://extratest.meditool.cn/";// 医库用药网址
// public static String getpushChat = "http://dev-wx.igandan.com/api/pushChat";// 微信推送
// public static String urlmyLan = "https://dev-app.igandan.com/app/expertAPI/";//迈兰
// public static String qrCode = "http://dev-wx.igandan.com/expert/expert" +
// "codeimg?expert_uuid=";//专家二维码页面分享链接:
// public static String urlOutpatient = "http://dev-wx.igandan.com/expert/outpatient_details?expert_uuid=";//门诊详情连接:
//
// public static String url_path = "https://dev-app.igandan.com/app";
// public static String videodetailURL = "http://dev-wx.igandan.com/video/hcp_detial?share=1&uuid=";
// public static String polvId = "11";//保利威视学员id
// public static String scanurl = "https://dev-wx.igandan.com/watchlive/sendWebsocketMsg";
// public static String zhibourl = weurl+"hcp/setInfo";
// public static String homeModalurl = urlmyLan+"homemodal";
// public static String PHP ="http://dev.hospital.open.igandanyiyuan.com";// php接口 互联网医院相关
// public static String modernHepatology="https://dev-wx.igandan.com";//常用医学工具
// public static String appkey = "26e8675f44565b1ed4eaaa0fcf3531d7";
// public static String appId ="123456";
// public static String youanapi ="https://dev-realyworld.igandan.com/api";
// public static String FileUrl="https://dev-event.igandan.com/v1/eventLog/upload";
/**
* 通用地址
* */
public static String getHospital=PHP+"/v1/user/doctor/multi";//互联网医院
public static String getGray= urlmyLan+"getGray";//互联网医院回合数
public static String getExpertPayInfo= urlmyLan+"getExpertPayInfo";//获取 收费随访信息
public static String urlOutpatientnew =weurl+"wxPatient/index.htm#/outPatient?link=share&expertUuid=";//出诊
public static final String expertDetail = urlapp + "expertDetail";// 专家详情
// public static final String expertDetail = "http://ceshi2.dsz360.com/app/expertApp/expertDetail";// 专家详情
public static String getDongTaiResList = urlapp+"getDongTaiResList";//肝胆医院详情-更多动态
public static String WFurl = "http://api.med.wanfangdata.com.cn/Paper/";// 万方网址
public static String WFSearch = WFurl + "Search";// 检索接口
public static String WFDetail = WFurl + "Detail";// 论文详 情接口
public static String WFDownload = WFurl + "Download";// 下载全文接口
public static String WFTransfer = WFurl + "Transfer";// 外文原文传递接口
//医库:
public static String YKURl = "http://api.doc.i-md.com/";// 医库网址
public static String YKSearch = YKURl + "literature/search";// 检索接口
public static String YKCheck_status = YKURl + "literature/check_status";// 检查状态
public static String YKDownload = YKURl + "literature/download";// 下载
public static String YKDetail = YKURl + "docs/info/";// 详情
public static String YKSearchMdeicion = YKMedicionURl + "Apidrug/medisearch";//
public static String YKmdeicionList = YKMedicionURl + "Apidrug/druglist";//
public static String YKmdeicioninteractionList = YKMedicionURl + "Apidrug/interact";//
public static String YKmdeiciondruginfoList = YKMedicionURl + "Apidrug/druginfo";//
// 商宇测试地址
// public static String
// url="http://192.168.1.11:8080/mgdxz/app/expert/";//局域网测试(内测专用)
// public static String
// url="http://182.92.67.209:8080/mgdxz/app/expert/";//测试地址
// public static String
// getzcxy="http://182.92.67.209:8080/mgdxz/zcxy.jsp";//注册协议测试地址
// public static String
// urlHtml="http://182.92.67.209:8081/gdxz/";//静态资源访问地址(图片、html等)测试地址
// public static String CrashUpload=
// "http://182.92.67.209:8080/mgdxz/app/upload/uploadExpert";//崩溃日志上传测试 地址.
// 帮助
// http://182.92.67.209:8080/gdxz/question_expert.html
public static String gethelp = urlHtml
+ "html/appHelp/698d65eade214a198210c5b78b0f877c.html";
// 下面是相应的方法
// public static String getregist = url + "regist";// 注册
public static String getregist = urlmyLan + "regist";// 注册
// public static String getlogin = url + "login";// 登录
public static String getlogin = urlmyLan + "login";// 登录
public static String getAccessToken = urlmyLan + "getAccessToken";// 获取token
public static String yxregist = urlmyLan + "createYXaccid";// 云信注册
public static String yxrefresh = urlmyLan + "refreshYXToken";// 刷新token
public static String ishasysytem=urlmyLan+"hasUnreadMessage";//获取是否有系统未读消息
public static String getShowMagazine=urlmyLan+"getShowMagazine";//是否打开期刊杂志
public static String unReadList=urlmyLan+"unReadList";//新的获取未读消息
public static String appMesageList=urlmyLan+"appMesageList";//新的消息列表
public static String appMesageRead=urlmyLan+"appMesageRead";//新的阅读全部消息
public static String readAll=urlmyLan+"readMessageAll";//一键已读全部消息
public static String getmodify = url + "modify";// 修改个人资料
public static String getnewsTagList = url + "newsTagList";// 新闻标签
// public static String getconsultListHis = url + "consultListHis";// 公益咨询历史列表
public static String getconsultListHis = urlmyLan + "consultListHis";// 公益咨询历史列表
// public static String getnewConsultList = url + "newConsultList";// 新的公益咨询列表
public static String getnewConsultList = urlmyLan + "newConsultList";// 新的公益咨询列表
public static String getNewsListNew = url + "newsListNew";// 新闻
public static final String medicine = url + "medicineByName";// 用药宝典
// public static String getsendSms = url + "sendSmsNew";// 短信发送
public static String getsendSms = urlmyLan + "smsSend";// 短信发送
public static String getImagecode = urlimage + "VerifyImage/getcode";// 短信发送
public static String getvalide = urlimage + "VerifyResult/valide";//
public static String getvalidSmsCode = url + "validSmsCode";// 找回密码(1)验证短信验证码
// public static String getupdatePwd = url + "updatePwd";// 找回密码(2)重置密码
public static String getupdatePwd = urlmyLan + "updatePwd";// 找回密码(2)重置密码
public static String getapplyList = url + "applyList";// 随访患者申请列表
public static String relationRecordLately=urlmyLan+"relationRecordLately";//最近30天的随访记录
public static String getapplyListOperate = url + "applyListOperate";// 随访患者申请处理
// public static String getpatientList = url + "patientList";// 我的患者列表
public static String getpatientList = url + "patientListByGBK";// 我的患者列表
public static String getQuickReplyList = url + "QuickReplyList";// 快捷回复list
public static String getaddQuickReply = url + "addQuickReply";// 添加快捷回复
public static String getdeleteQuickReply = url + "deleteQuickReply";// 删除快捷回复
public static String getareaList = url + "areaList";// 行政区划列表
public static String getpositionList = url + "positionList";// 获取职称列表
public static String gethospitalList = url + "hospitalList";// 获取医院列表
public static String getofficeList = url + "officeList";// 获取科室列表
public static String getdisease = url + "disease";// 获取专长
public static String getpushIM = url + "pushIM";// 发送消息(IM单聊)
public static String getresConsult = url + "resConsult";// 抢答公益咨询
public static String getconsultImgList = urlmyLan + "consultDetail";// 公益咨询详情
// public static String getconsultImgList = url + "consultImgList";// 公益咨询图片查询
public static String getpatientDetail = url + "patientDetail";// 患者详情
public static String gettoAddNickname = url + "toAddNickname";// 备注数据
public static String getupdateNickname = url + "updateNickname";// 提交备注数据
public static String getcaseDetail = url + "caseDetail";// 病历详情
public static String getfeedBack = url + "feedBack";// 意见反馈
public static String getnewsRollIndexNew = url + "newsRollIndexNew";// 首页轮播新闻
public static String getnewsRollNew = url + "newsRollNew";// 新闻顶部轮播
public static String getnewsListNew = url + "newsListNew";// 新闻列表
public static String getdefaultNewsListNew = url + "defaultNewsListNew";// 新闻列表全部数据
public static String getinvitePatient = url + "invitePatient";// 邀请患者
public static String getgroupPushSystem = url + "groupPushSystem";// 群发消息
public static String getgroupPush = url + "groupPushSystem";// 群发消息
public static String getorderList = url + "orderList";// 订单列表
public static String getorderDetailt = url + "orderDetail";// 订单详情
public static String getcheckOrder = url + "checkOrder";// 专家审核订单
public static String getcancelOrder = url + "cancelOrder";// 取消服务
public static String getmonthDetail = url + "monthDetail";// 包月服务查看
public static String getaddMonth = url + "addMonth";// 包月服务设置
public static String getclinicDetail = url + "clinicDetail";// 门诊服务查看
public static String getaddClinic = url + "addClinic";// 预约门诊服务设置1(价格、人次等设置)
public static String getaddClinicTime = url + "addClinicTime";// 预约门诊服务设置2(时间设置)
public static String getcallServiceDetail = url + "callServiceDetail";// 电话咨询服务查看
public static String getcallServiceFee = url + "callServiceFee";// 电话咨询服务设置1(价格、时长等设置)
public static String getcallServiceTime = url + "callServiceTime";// 电话咨询服务设置2(时间设置)
public static final String getRead = url + "read";// 获取阅读量加1和点赞接口
public static final String getAgree = url + "agree";// 点赞
public static final String getDisAgree = url + "disagree";// 取消点赞
public static final String getFollowUpList = url + "followUpList";// 获取随访计划
public static final String getAddFollowUp = url + "addFollowUp";// 添加随访日程
public static final String getAddFollowUps = url + "addFollowUps";// 添加随访计划
public static final String getDeleteFollowUp = url + "deleteFollowUp";// 获取随访计划
public static final String getAddConditionRecord = url
+ "addConditionRecord";// 添加病情记录
public static final String getConditionRecordList = url
+ "conditionRecordList";// 获取病情记录
public static final String getUpdateFollowUp = url + "upConditionRecord";// 修改
public static final String getDelConditionRecord = url
+ "delConditionRecord";// 删除病情记录
public static final String getmedicalRecordShareList = url+ "medicalRecordShareList";// 圈内交流经典病例
public static final String CaseAssembleList = url+ "CaseAssembleList";// 圈内交流经典病例
//精品课程
public static final String getCourseIndex = urlmyLan + "excellencourseIndex";//精品课首页
public static final String getCourseIndexIcon = urlmyLan + "listExcellencourseSpecialType";
public static final String getCourseIndexSearch = urlmyLan + "excellencourseSearch";//搜索精品课
public static final String getMoreByFirstType = urlmyLan + "excellencourseMoreByFirstType";//肝胆精品课列表
public static final String getMoreBySpeciaType = urlmyLan + "excellencourseMoreBySpecialType";//精品小课等列表
public static final String listExcellencourseSecondType = urlmyLan + "listExcellencourseSecondType";//二级列表
public static final String listExcellencourseFirstType= urlmyLan + "listExcellencourseFirstType";//yi级列表
public static final String getexcellencourseDetail = urlmyLan + "excellencourseDetail";//精品小课等详情页
public static final String listExcellencourseComment = urlmyLan + "listExcellencourseComment";//evaluate
public static final String listExcellencourseCommentByUser = urlmyLan +"listExcellencourseCommentByUser";
public static final String getExcellencourseCommentNote = urlmyLan +"getExcellencourseCommentNote";
public static final String addExcellencourseComment = urlmyLan +"addExcellencourseComment";//add comment
public static final String listExcellencourseQA = urlmyLan +"listExcellencourseQA";
public static final String listMyExcellencourse = urlmyLan +"listMyExcellencourse";
// public static final String excellencoursePayPage = urlping2 +"excellencoursePayPage";
public static final String excellencoursePayPage = urlimage +"expertPay/excellencoursePayPage";
// public static final String createExcellencourseMixedOrder = urlping2 +"createExcellencourseMixedOrder";
public static final String createExcellencourseMixedOrder =urlimage+"expertPay/createExcellencourseOrder";
// public static final String payExcellencourseOrderSucceed = urlping2 +"payExcellencourseOrderSucceed";
public static final String payExcellencourseOrderSucceed = urlimage +"expertPay/payExcellencourseOrderSuccess";
// public static final String cancelExcellencourseOrder = urlping2 +"cancelExcellencourseOrder";
public static final String cancelExcellencourseOrder = urlimage +"expertPay/cancelExcellencourseOrder";
// public static final String payExcellencourseOrder = urlping2 +"payExcellencourseOrder";
public static final String payExcellencourseOrder=urlimage+"expertPay/payExcellencourseOrderContinue";
public static final String listExcellencourseOrder = urlmyLan +"listExcellencourseOrder";
public static final String listExcellencourseOrderNoInvoice = urlmyLan +"listExcellencourseOrderNoInvoice";
public static final String addExcellencourseOrderInvoice = urlmyLan +"addExcellencourseOrderInvoice";
public static final String listExcellencourseOrderInvoice = urlmyLan +"listExcellencourseOrderInvoice";
public static final String getExcellencourseOrderInvoice = urlmyLan +"getExcellencourseOrderInvoice";
public static final String updateExcellencourseOrderInvoice = urlmyLan +"updateExcellencourseOrderInvoice";
public static final String myWelfareCard=urlmyLan+"myWelfareCard";
public static final String exchangeWelfareCard=urlmyLan+"exchangeWelfareCard";
/**
* 肝系一生
*/
public static final String mailanPage = urlmyLan +"mailanPage";
/**
* 病例讨论 新接口
*/
public static final String getAddCaseDiscuss = urlapp + "addCaseDiscuss";// 1.9.添加病例讨论
public static final String getDelCaseDiscuss = urlapp + "delCaseDiscuss";// 1.10.删除病例讨论
public static final String getUpCaseDiscuss = urlapp + "upCaseDiscuss";// 1.11.修改病例讨论
// public static final String getCaseDiscussDetail = urlapp+ "caseDiscussDetail";// 1.12.病例讨论详情
public static final String getCaseDiscussDetail = urlmyLan+ "caseDiscussDetail";// 1.12.病例讨论详情
// public static final String getCaseDiscussList = urlapp + "caseDiscussList";// 1.13.病例讨论列表
public static final String getCaseDiscussList = urlmyLan + "caseDiscussList";// 1.13.病例讨论列表
// public static final String getCaseDiscussListByExpertUuid = urlapp
// + "caseDiscussListByExpertUuid";// 1.14.某个医生病例讨论列表 我发布的病例
public static final String getCaseDiscussListByExpertUuid = urlmyLan
+ "caseDiscussListByExpertUuid";// 1.14.某个医生病例讨论列表 我发布的病例
// public static final String getAddComment = urlapp + "addComment";//
// 1.15.添加评论
// public static final String getDeleteComment = urlapp + "deleteComment";//
// 1.16.删除评论
// public static final String ge tCommentList = urlapp + "commentList";//
// 1.17.获取评论列表
public static final String getTeachDataNew = url + "noviceListNew";// 新手教程
public static final String getcollection = url + "collection";// 经典病例收藏
public static final String getdiscollection = url + "discollection";// 经典病例取消收藏
public static final String getcollectionList = url + "collectionList";// 圈内分型经典病例收藏列表
public static String getsearchhelp = url + "searchhelp"; // 代查
// public static final String getQkcollect = url + "qkcollect";// 期刊杂志收藏
public static final String getQkcollect = url + "YiKuQKcollect";// 期刊杂志收藏
public static final String getCollectList = url + "collectList";// 期刊杂志收藏列表
public static final String getiscollectqk = url + "iscollectqk";// 期刊杂志是否收藏
public static final String getWanFangCountByExpertUuid = url
+ "WanFangCountByExpertUuid";// 万方期刊专家下载统计
public static final String addLiteratureFind=urlmyLan+"addLiteratureFind";//文献代查
public static final String getDaiChaWelfareCount=urlmyLan+"getDaiChaWelfareCount";//获取文献查找次数
public static final String getaddWanFangCount = url + "addWanFangCount";// 万方期刊专家专家下载记录
public static final String expertrollNew = urlapp+"expertrollNew";//新首页横幅
//public static final String meetingListBySearchNew = urlapp+"meetingListBySearchNew";//肝胆会议列表-筛选 wcx
public static final String meetingListBySearchNew = urlmyLan+"meetingListBySearch";//新版会议筛选
// public static final String meetingVideo = urlapp+"meetingVideo";//肝胆会议回放列表
public static final String meetingVideo = urlmyLan+"meetingV2Video";//肝胆会议回放列表
public static String getaddExpertCalendar = url + "addExpertCalendar";// 添加门诊日历接口:
public static String getdeleteExpertCalendar = url + "deleteExpertCalendar";// 删除门诊日历接口:备用
public static String getupdataExpertCalendarForever = url
+ "updataExpertCalendarForever";// 7、修改门诊日历(永久)接口:
public static String getupdataExpertCalendarTemporary = url
+ "updataExpertCalendarTemporary";// 修改门诊日历(当前一周)接口
public static String getgetExpertCalendar = url + "getExpertCalendar";// 获取专家出诊计划数据做回显
public static String getflowerOrderRecord = url + "flowerOrderReco rd";// 收花统计
public static String getcash = url + "cash"; // 提现
public static String getmyAccount = url + "myAccount";// 我的账户
public static String getmyBankList = url + "myBankList";// 我的银行卡列表
public static String getpreCash = url + "preCash"; // 提现、 可提现订单列表
public static String getmodifyPwd = url + "modifyPwd";// 修改密码
public static String getmessageList = url + "messageList";// 系统消息列表
public static String getcloseConsult = url + "closeConsult";// 关闭公益咨询
public static String gettransactionRecords = url + "transactionRecords";// 交易记录
public static String getGuideType = url + "guideType";// 治疗指南分类
public static String getGuideList = url + "guideList";// 治疗指南列表
public static String getMagazineType = url + "magazineType";// 期刊杂志分类
public static String getWfmagazineType = url + "wfmagazineType";// 万方期刊杂志分类
public static String getCnmagazineType = url + "cnmagazineType";// 英语期刊杂志分类
public static String getGetMagazineByUuid = url + "getMagazineByUuid";// 根据UUID查询专期刊杂志
public static String getCollect = url + "collect"; // 点击收藏
// public static String getSearchLibrary = url + "searchLibrary"; // 3.83.图书搜索
// public static String getCollectList = url + "collectList"; // 图书馆我的收藏
public static String getMagazineList = url + "magazineList"; // 期刊杂志列表magazineList
public static String getmyPublishMessage = url + "myPublishMessage"; // 我发布的消息//
public static String getUpdateArticle = url
+ "updateArticle";// 科普文章修改
public static String getMoveScienceListNew = url
+ "deletePolularScienceArticleNew";// 科普文章撤稿
public static String getScienceListNew = url
+ "expertPolularScienceArticleListNew";// 科普文章已发布
public static String getpolularScienceArticleListIsNotisThroughNew = url
+ "polularScienceArticleListIsNotisThroughNew";// 科普文章待发布
public static String getSubmitScience = url
+ "polularScienceArticleSubmission";// 我要投稿
public static String getaddBankCard = url + "addBankCard";// 添加银行卡
public static String getdelBankCard = url + "delBankCard";// 删除银行卡
public static String getLoveList = url + "loveDonateList";// 爱心捐助列表
public static String getSubmitLove = url + "iWantDonate";// 我要捐助
public static String getExpertByUuid = url + "getExpertByUuid";// 根据用户查询专家信息【专家的个人资料查询】
public static String getcancleRes = url + "cancelRes";// 解除随访关系
public static String getforeBack = url + "foreBack";// 每次登陆退出手机软件在前后台切换
// 例如Home键软件进入后台
public static String getMyWork = url + "myWork"; // 我的工作表
public static String getMessageDetail = url + "messageDetail"; // 查看系统消息详情
public static String getDeleteMessage = url + "deleteMessage"; // 删除系统消息
// public static String getUpdateMobile1 = url + "updateMobile1"; // 修改手机号
public static String getUpdateMobile1 = urlmyLan + "updateMobile"; // 修改手机号
public static String getHospitalByCountyID = url + "getHospitalList"; // 根据定位获取医院列表
public static String hospitalListnew=urlmyLan+"hospitalList";
public static String areaList=urlmyLan+"areaList";
public static String operaterVIP = url + "operaterVIP"; // 操作VIP服务(关闭开启)
public static String getVersion = url + "getVersion"; // 获取版本号
public static String getExpertQrcode = url + "getExpertQrcode"; // 获取二维码
public static String getmyProject = url + "expertScientificResearchProject"; // 我的科研项目
public static String getscientificProject = url
+ "scientificResearchProject"; // 科研项目列表
public static String getGroupList = urlapp + "groupList";// 获取分组信息
public static String GroupList = urlapp + "GroupList";// 分组管理
public static String getAddGroup = urlapp + "addGroup";// 添加分组
public static String getDeleteGroup = urlapp + "deleteGroup";// 删除分组
public static String getPatientListByGroup = urlapp + "patientListByGroup";// 获取单个分组的信息
public static String getUpdateGroup = urlapp + "updateGroup";// 修改分组
public static String getActivityList = urlapp + "activityList";// 肝胆活动
public static String getClinicalList = urlapp + "clinicalList";// 临床招募
// public static String getCommentList = urlapp + "commentList";// 获取评论列表wcx
// public static String getCommentList = urlmyLan + "videoCommentList";// 获取评论列表wcx
public static String getCommentList = urlmyLan + "videoCommentListV2";// 获取评论列表wcx
// public static String getNewCommentList = urlmyLan + "listTransformComment";// 新获取评论列表
public static String getNewCommentList = urlmyLan + "commentList";// 新获取评论列表
// public static String getClinicalCommentList = urlapp
// + "clinicalCommentList";// 临床招募评论列表
public static String getClinicalCommentList = urlmyLan
+ "clinicalCommentList";// 临床招募评论列表
// public static String getAddComment = urlapp + "addComment";// 添加评论
public static String getAddComment = urlmyLan + "addComment";// 添加评论
public static String addCommentV2 = urlmyLan + "addCommentV2";// 添加评论
public static String addCommentReplyV2 = urlmyLan + "addCommentReplyV2";// 回复
// public static String getAddCommentReply = urlapp + "addCommentReply";// 回复评论
public static String getAddCommentReply = urlmyLan + "addCommentReply";// 回复评论
public static String getDeleteComment = urlapp + "deleteComment";// 删除评论
public static String getMeetingList = urlapp + "meetingList";// 肝胆会议
public static String getNewMeetingList = urlmyLan + "meetingList";// 新版会议地址
public static String getHistoryMeetingList = urlmyLan + "meetingHistoryList";// 新历史会议地址
public static String getMeetingHistory = urlapp + "meetingHistory";// 肝胆回放老接口,已弃用
public static String getExpertroll = urlapp + "expertroll";// 首页条目
public static String getTimestamp = urlimage + "manager/getSystemTimeStamp";//获取时间戳
public static String getQuickLoginSms = urlapp + "quickLoginSms";//快捷登录发短信
public static String umSmsLogin = urlmyLan+"umSmsLogin";//快捷登录
// public static String getQuickLogin = urlapp + "quickLogin";//快捷登录
public static String getQuickLogin = urlmyLan + "quickLogin";//快捷登录
public static String umGetMobile=urlmyLan+"umGetMobile";//获取手机号
public static String umVerifyLogin=urlmyLan+"umVerifyLogin";//友盟认证登录
public static String wechatBindMobile=urlmyLan+"wechatBindMobile";//微信登录绑定手机号
public static String wechatLogin=urlmyLan+"wechatLogin";//微信登录
// public static String getVideoNew = urlapp + "videoNew";// 肝胆视频
public static String getVideoNew = urlmyLan + "videoIndex";// 肝胆视频
public static String getVideoTagNew = urlmyLan + "expertVideoTypeList";//
public static String getTypeUuidByName = urlapp + "getTypeUuidByName";// 肝胆视频
public static String getJHVideoNew = urlapp + "videoByJingHuaNew";// 精华肝胆视频
public static String getVideoByTypeNew = urlapp + "videoByTypeNew";// 肝胆视频更多
public static String getVideoBySearchNew = urlapp + "videoBySearchNew";// 搜索肝胆视频
public static String getStartpage = urlapp + "startpage";// 欢迎页
// public static String getInteractionList = urlapp + "interactionList";// 互动交流列表
public static String getInteractionList = urlmyLan + "interactionList";// 互动交流列表
// public static String getInteractionListByExpertUuid = urlapp
// + "interactionListByExpertUuid";// 我的互动交流列表
public static String getInteractionListByExpertUuid = urlmyLan
+ "interactionListByExpertUuid";// 我的互动交流列表
// public static String getInteractionDetail = urlapp + "interactionDetail";// 互动交流详情
public static String getInteractionDetail = urlmyLan + "interactionDetail";// 互动交流详情
// public static String getInteractionListByTag = urlapp
// + "interactionListByTag";// 互动交流详情
public static String getInteractionListByTag = urlmyLan
+ "interactionListByTag";// 互动交流详情
public static String getAddInteraction = urlapp + "addInteraction";// 互动交流详情
public static String getPolularScienceArticleListInexpertNew = urlapp
+ "polularScienceArticleListInexpertNew";// 患教学堂
public static String getPolularScienceArticleListInexpert4JingHuaNew = urlapp
+ "polularScienceArticleListInexpert4JingHuaNew";// 患教学堂精选
public static String getUpdateApk = urlimage + "appVer/ckCurrVer";// 版本更新
public static String checkVersion=urlmyLan+"checkVersion";//版本管理
// public static String getCreateXinyiOrder = urlping + "expertPay/createXinyiOrder";// 创建订单
public static String getCreateXinyiOrder =urlimage+"expertPay/createXinYiOrder";//创建心意
public static String getpayXinyiOrderSucceed = urlping
+ "payXiYiOrderSucceed";// 完成订单
public static String xinyiPrice=urlimage+"/expertPay/xinyiPrice";//心意单价
// public static String getPayXinYiOrder = urlping + "payXinYiOrder";// 支付
public static String getPayXinYiOrder = urlimage+"expertPay/payXinYiOrder";// 支付
public static String getXinYiOrder="expertPay/getXinYiOrder";
public static String getIdentificationIdCard = urlping
+ "identificationIdCard";// 身份证
// public static String getIdentificationBankCard = urlping
// + "identificationBankCard";// 验证银行卡信息
public static String getIdentificationBankCard = urlping2+ "identificationBankCardNew";// 验证银行卡信息
public static String getBankCardList = urlping + "BankCardList";// 银行卡列表
public static String getExpertXinYiList = urlping + "expertXinYiList";// 心意列表
// public static String getExpertFlowerList = urlping + "expertFlowerList";// 鲜花列表
public static String getExpertFlowerList = urlimage + "expertPay/getFlowerList";// 鲜花列表
// public static String getRetrieveUser = urlping + "retrieveUser";// 我的账户
public static String getRetrieveUser = urlimage + "/expertPay/getBalance";// 我的余额
public static String getBankCardCount = urlping + "BankCardCount" ;// 银行卡数量
public static String getOrderStatus=urlimage+"expertPay/getOrderStatus";//支付订单状态查询
public static String getDeleteBankCard = urlping + "deleteBankCard";// 删除银行卡
// public static String getCreateWithdrawal4Unionpay = urlping
// + "createWithdrawal4Unionpay";// 提现
public static String getCreateWithdrawal4Unionpay = urlimage
+ "expertPay/createWithdrawal";// 提现
public static String getIncomeTax=urlimage +"/expertPay/getIncomeTax";
// public static String getOrderList = urlping + "orderList";// 心意账单列表
public static String getOrderList = urlimage + "expertPay/orderList";// 账单列表
public static String getExpertXinYi = urlping + "expertXinYi";// 心意订单详情
public static String getCancelOrder = urlping + "cancelOrder";// 取消心意订单
// public static String getAllPingXinYiOrder = urlping + "allPingXinYiOrder";// 心意墙
public static String getAllPingXinYiOrder =urlimage+"/expertPay/allXinyiList";
// public static String getAllPingXinYiOrder = urlimage + "/expertPay/xinyiList";// 心意墙
public static String getWithdrawalBalanceDetial = urlping + "WithdrawalBalanceDetial";// 提现详情
//1.8.0 接口
public static String getSearchLibrary = url + "searchLibrary";// 治疗指南和期刊杂志搜索
public static String getPolularScienceArticleListByKeywordsNew = urlapp + "polularScienceArticleListByKeywordsNew";// 患教学堂搜索
public static String getTagList = urlapp + "tagList";// 筛选标签
public static String getVideoByKeyWordsNew = urlapp + "videoByKeyWordsNew";// 视频筛选
public static String getNewsListbykeywordsNew = urlapp + "newsListbykeywordsNew";// 新闻筛选
public static String getCountConsult = url + "countConsult";// 回答患者次数
//2.0.0
public static String getEducationOnlineList = urlapp + "educationOnlineList";//肝胆学院列表
// public static String getExpertroll = urlapp + "educationOnlineList";//肝胆学院列表
public static String getSystemTime= urlimage + "manager/getSystemTime";//获取系统时间 验证码
//2.1.0
public static String getMedicineTagListNoPage = urlapp + "MedicineTagListNoPage";//药品助手标签
public static String getNoviceTagListNoPage = urlapp +"NoviceTagListNoPage";//新手教程标签
//2.3.0
public static String getPlayBack = urlapp +"educationOnlinePlayBack";//往期回顾更多页面
public static String getDetectionIndex = urlapp +"detectionIndex";//肝病监测
public static String getDetectionContent = urlapp +"detectionContent";//肝病监测二级页面
//2.6.0 患教视频
public static String getPtientVideoNew = urlapp +"patientVideoNew";//
public static String getPatientVideoByTypeNew = urlapp +"patientVideoByTypeNew";//
public static String getPatientVideoByJingHuaNew = urlapp +"patientVideoByJingHuaNew";//
public static String getPatientVideoBySearchNew = urlapp +"patientVideoBySearchNew";//
public static String getPatientVideoByKeyWordsNew = urlapp +"patientVideoByKeyWordsNew";//
public static String patientVideoByName = urlapp +"patientVideoByName";//患教视频科普分享
//肝胆课件
public static String getGanDanFileList = urlapp +"ganDanFileList";//肝胆课件列表
public static String getGanDanFileByKeyWords = urlmyLan +"ganDanFileByKeyWords";//肝胆课件列表
public static String getGanDanFileDetials = urlmyLan +"ganDanFileDetials";//肝胆课件详情
public static String gandanFileDetail = urlmyLan +"gandanFileDetail";//推送肝胆课件详情
// public static String getCreateGanDanFileOrder = urlping +"createGanDanFileOrder";//创建肝胆课件订单
public static String getCreateGanDanFileOrder = urlimage +"expertPay/createGanDanFileOrder";//创建肝胆课件订单
// public static String getPayGanDanFileOrder = urlping +"payGanDanFileOrder";//支付肝胆课件
public static String getPayGanDanFileOrder = urlimage +"expertPay/payGanDanFileOrder";//支付肝胆课件
public static String getPayGanDanFileOrderSucceed = urlping +"payGanDanFileOrderSucceed";//支付成功后回调
// public static String getGanDanFileOrderDetial = urlping +"ganDanFileOrderDetial";//订单详情
public static String getGanDanFileOrderDetial = urlimage+"expertPay/getGanDanFileOrder";//订单详情
public static String getCancelGanDanFileOrder = urlping +"cancelGanDanFileOrder";//取消订单
public static String getDownloadGanDanFile= urlapp +"downloadGanDanFile";//支付成功后回调
public static String getMyDownload= urlapp +"gandanfile/myDownload";//我的下载(课件)
public static String getMyShare= urlapp +"gandanfile/myShare";//我的下载(课件)
//肝胆医院
public static String getHospitalIndexRoll= urlapp +"hospitalIndexRoll";//肝胆医院首页滚动
public static String getKeShiIndexRoll= urlapp +"hospitalIndexRoll";//肝胆科室首页滚动
public static String getGanDanHospital= urlapp +"ganDanHospital";//肝胆医院列表+搜索
public static String getaddFocusganDanHospital= urlapp +"addFocusganDanHospital";//添加医院关注
public static String getcancleFocusganDanHospital= urlapp +"cancleFocusganDanHospital";//添加医院关注
public static String getganDanHospitalDetial= urlapp +"ganDanHospitalDetial";//添加医院关注
public static String getGanDanKeShi= urlapp +"ganDanKeShi";//肝胆科室列表+搜索
public static String getProclamationAll= urlapp +"getProclamationAll";//更多公告
public static String getExpertAll= urlapp +"getExpertAll";//更多医生
public static String getMessageAll= urlapp +"getMessageAll";//更多留言
public static String getMessageDetial= urlapp +"getMessageDetial";//留言详情
public static String getmessageCommentList= urlapp +"messageCommentList";//留言评论列表
public static String getaddProclamation= urlapp +"addProclamation";//添加公告
public static String getVideoResList= urlapp +"getVideoResList";//添加公告
public static String ganDanExpertList = urlapp +"GanDanExpertList";//肝胆名医列表+搜索
//积分接口
public static String addBonusPoints = urlapp +"addBonusPoints";//添加积分
public static String myBonusPoints = urlapp +"myBonusPoints";//查询个人积分
public static String bonusPointsList = urlapp+"bonusPointsList";//积分列表
public static String bonusPointsPayList = urlapp+"bonusPointsPayList";//积分支出列表
public static String goodsList = urlmyLan+"goodsList";//商品分页查询
public static String goodsListV2=urlmyLan+"goodsListV2";
public static String goodsTagList=urlmyLan+"goodsTagList";
public static String goodsNewsList = urlapp+"goodsNewsList";//轮播图
public static String getGoods = urlapp+"getGoods";//查询商品详情
public static String getUpanWelfareCount = urlmyLan+"getUpanWelfareCount";//u盘个数
public static String createGoodsOrder = urlapp+"createGoodsOrder";//创建积分商城订单
public static String payGoodsOrder = urlapp+"payGoodsOrder";//支付订单
public static String getOrderTrack = urlmyLan+"getOrderTrack";//积分商城-查询快递100
public static String goodsOrderList = urlapp+"goodsOrderList";//订单分页查询
public static String getGoodsOrder = urlapp+"getGoodsOrder";//查询订单详情
public static String cancleGoodsOrder = urlapp+"cancleGoodsOrder";//取消订单
//职业地点接口
public static String listWorkPlace = urlapp+"listWorkPlace";//执业地点-列表
public static String hospitalList = urlapp+"hospitalList";//添加职业地点-医院列表
public static String addWorkPlace = urlapp+"addWorkPlace";//执业地点-增加
public static String editWorkPlace = urlapp+"editWorkPlace";//执业地点-修改
public static String deleteWorkPlace = urlapp+"deleteWorkPlace";//执业地点-删除
//停诊安排
public static String stopOutPatientList = urlapp+"stopOutPatientList";//停诊安排-列表
public static String addStopOutPatient = urlapp+"addStopOutPatient";//添加停诊安排
public static String deleteStopOutPatient = urlapp+"deleteStopOutPatient";//停诊安排-删除
public static String updateStopOutPatient = urlapp+"updateStopOutPatient";//修改停诊安排
//门诊安排
public static String listOutPatient = urlapp+"listOutPatient";//门诊安排列表
public static String addOutPatientA = urlapp+"addOutPatientA";//添加门诊安排
public static String addOutPatient = urlmyLan+"addOutPatient";//添加门诊安排
public static String deleteOutPatient = urlapp+"deleteOutPatient";//删除门诊安排
public static String updateOutPatient = urlapp+"updateOutPatient";//修改门诊安排
public static String updateOutPatientA = urlapp+"updateOutPatientA";//修改门诊安排A
public static String newsDetial = url+"newsDetial";//新闻详情
public static String newsDetail = urlmyLan+"newsDetail";//推送新闻详情
public static String liveDetail = urlmyLan+"liveDetail";//推送直播详情
public static String caseDetial = url+"caseDetial";//病例荟萃详情
public static String medicalRecordShareDetail = urlmyLan+"medicalRecordShareDetail";//查房实录
//治疗指南
public static String top10ByType = urlapp+"top10ByType";//每个类型,本年度Top10
public static String addGuideDownload = urlapp+"addGuideDownload";//添加指南下载记录
//精品课程
public static String listSeriesType = urlapp+"listSeriesType";//兑换专区
public static String listFree = urlapp+"listFree";//免费专区
public static String getSeriesVideoDetial = urlapp+"getSeriesVideoDetial";//视频详情
public static String createSeriesVideoOrder = urlapp+"createSeriesVideoOrder";//创建系列视频订单
public static String paySeriesVideoOrder = urlapp+"paySeriesVideoOrder";//支付系列视频订单
public static String cancleSeriesVideoOrder = urlapp+"cancleSeriesVideoOrder";//取消系列视频订单
public static String SeriesVideoNewsList = urlapp+"SeriesVideoNewsList";//轮播图
public static String listSeriesVideoByType = urlapp+"listSeriesVideoByType";//系列更多视频
public static String listMySeriesType = urlapp+"listMySeriesType";//已兑换
public static String readSeriesVideo = urlapp+"readSeriesVideo";//阅读量+1
//迈兰患教
public static String mailanAdd = urlmyLan+"mailanAdd";//在线申请
public static String mailanUpdate = urlmyLan+"mailanUpdate";//在线申请修改
public static String mailanRemind = urlmyLan+"mailanRemind";//患教提醒
public static String mailanList = urlmyLan+"mailanList";//申请列表
public static String mailanNoticeAdd = urlmyLan+"mailanNoticeAdd";//添加患教公告
public static String mailanNoticeUpate = urlmyLan+"mailanNoticeUpate";//修改患教公告
public static String mailanNoticeGet = urlmyLan+"mailanNoticeGet";//获取患教公告
public static String isMaiLanExpert = urlmyLan+"isMaiLanExpert";// 判断是否为迈兰医生
// 积分券
public static String pointTicketlist = urlmyLan+"pointTicketlist";// 积分券列表
public static String updateStatus = urlmyLan+"updateStatus";// 积分券兑换
//购买积分
public static String getPointUnitPrice = urlapp+"getPointUnitPrice";// 积分单价
// public static String createPointOrder = urlping+"createPointOrder";// 创建积分 订单
public static String createPointOrder = urlimage+"expertPay/createBointsOrder";// 创建积分 订单
// public static String payPointOrder = urlping+"payPointOrder";//支付积分订单
public static String payPointOrder = urlimage+"expertPay/payBointsOrder";//支付积分订单
public static String payPointOrderSucceed = urlping+"payPointOrderSucceed";//支付积分订单成功后调用
//一问多答 新的一问多答列表
public static String listNewInterrogation = urlmyLan+"listNewInterrogation";// 一问多答 新的一问多答列表
public static String listMyAnsweredInterrogation = urlmyLan+"listMyAnsweredInterrogation";// 一问多答 我回答的一问多答列表
public static String getInterrogation = urlmyLan+"getInterrogation";// 一问多答 详情页
public static String InterrogationPatientInfo = urlmyLan+"InterrogationPatientInfo";// 一问多答 患者详情页
public static String addInterrogationAnswer = urlmyLan+"addInterrogationAnswer";// 一问多答 回答
public static String updateInterrogationAnswer = urlmyLan+"updateInterrogationAnswer";// 一问多答 编辑回答
public static String patientCard = urlmyLan+"patientCard";// 患者详情
public static String updateNicknameNote=urlmyLan+"updateNicknameNote";
public static String getFollowUp = url+"getFollowUp";// 随访详情
public static String patientVideoType = urlapp+"patientVideoType";// 患者视频类型列表
public static String getKePuCollection = url+"getKePuCollection";// 患教学堂详情
public static String addVideoWatchRecord = urlmyLan+"addVideoWatchRecord";// 添加视频浏览记录
public static String VideoWatchRecord = urlmyLan+"VideoWatchRecord";// 视频浏览记录列表
public static String deleteRecord = urlmyLan+"deleteRecord";// 删除视频浏览记录
public static String videoDetail = urlmyLan+"videoDetail";// 视频详情
public static String isVideoDownloadRecord = urlmyLan+"isVideoDownloadRecord";// 查询是否缓存过该视频
public static String payVideoDownload = urlmyLan+"payVideoDownload";// 支付视频缓存积分
public static String hero2019 = urlmyLan+"hero2019";// 支付视频缓存积分
public static String listGroupSendMsg = urlmyLan+"listGroupSendMsg";// 查询群发记录
// public static String addGroupSendMsg = urlmyLan+"addGroupSendMsg";// 添加群发记录老接口
// public static String addGroupSendMsg = urlmyLan+"addGroupSendMsgNew";// 添加群发记录
public static String addGroupSendMsg = urlmyLan+"addGroupSendMsg4YunXin";// 添加群发记录
public static String delGroupSendMsg = urlmyLan+"delGroupSendMsg";// 删除群发记录
public static String updateGroup = urlmyLan+"patientCardUpdateGroup";// 添加多个分组
public static String getTotalPoints = urlmyLan+"getTotalPoints";// 获得总积分
public static String videoRoll = urlmyLan+"videoRoll";// 专家端视频轮播
public static String getAppActivity = urlmyLan+"getAppActivity";//专家端福利赠书活动
public static String getUserIcon = urlmyLan+"getUserIcon";//专家获得动态图标getUserIcon
public static String addUserIcon = urlmyLan+"addUserIcon";//添加动态图标getUserIcon
public static String expertHonor = urlmyLan+"expertHonor";//荣誉列表
public static String gethonorDetail = urlmyLan+"gethonorDetail";// 点击查看荣誉详情
//我的首页新
public static String myHomeNew = urlmyLan+"indexV2";
//我的新
public static String myNew = urlmyLan+"my";
//友盟关联Device Token
public static String addUMToken = urlmyLan+"addUMToken";
//我的福利
// 我的福利-领取福利页面
// 地址:expertAPI/getWelfarePage
// 我的福利-使用福利页面
// 地址:expertAPI/getWelfarePage
// 我的福利-领取福利操作
// 地址:expertAPI/receiveWelfare
// 参数type (1视频2课件3精品4万方5U盘)
// 更正 : 我的福利-使用福利页面
// 地址:expertAPI/useWelfarePage
// 无参
// 我的福利-查询福利剩余次数
// 地址:expertAPI/getWelfareNum
// 参数type (1视频2课件3精品4万方5U盘)
// 我的福利-使用福利操作
// 地址:expertAPI/useWelfareNum
// 参数type (1视频2课件3精品4万方5U盘)
public static String getWelfarePage = urlmyLan + "getWelfarePage";//领取福利页面
public static String receiveWelfare = urlmyLan + "receiveWelfare";//领取福利操作
public static String useWelfarePage = urlmyLan + "useWelfarePage";//使用福利页面
public static String getWelfareNum = urlmyLan + "getWelfareNum";//查询福利剩余次数 type (1视频2课件3精品4万方5U盘)
public static String useWelfareNum = urlmyLan + "useWelfareNum";//使用福利操作 type (1视频2课件3精品4万方5U盘)
public static String welfareList = urlmyLan + "welfareList";//福利详情列表 1视频 2课件 3精品课程 4万方 5U盘
public static String getIsAccount = urlmyLan + "getIsAccount";//专家端返回专家账户状态返回字段is_account (0已隐藏 1正常)
public static String hasDownloadWanFang = urlmyLan + "hasDownloadWanFang";//查看是否下载过本篇文章
public static String addWanFangRecord = urlmyLan + "addWanFangRecord";//查看是否下载过本篇文章
public static String getUGoods = urlapp + "getUGoods";//U盘信息
public static String getWelfareNotice = urlmyLan + "getWelfareNotice";//专家端我的福利模块,消息弹框提醒
public static String isBoundWechatByUuid = urlmyLan + "isBoundWechatByUuid";//判断用户是否绑定过微信
public static String addWechatExpert = urlmyLan + "addWechatExpert";//绑定微信
public static String delWechatExpert = urlmyLan + "delWechatExpert";//解除绑定
public static String getMagazineByUuid = urlmyLan + "getMagazineByUuid";//根据UUID查询期刊杂志
public static String getNewWa="https://wx.igandan.com/shop_notify/";//肝胆商城妞娃购买链接
public static String isConsultIng = urlmyLan + "isConsultIng";//是否存在正在进行中的公益咨询
//佑安项目
public static String getRealyWorldToken=urlmyLan+"getRealyWorldToken";
public static String youanlist =youanapi+"/app/project/list";
public static String youangetDetail =youanapi+"/app/project/getDetail/";
public static String youanmyList =youanapi+"/app/project/myList";
public static String youangetRoleList =youanapi+"/app/employee/getRoleList/";
public static String youanselectRole =youanapi+"/app/selectRole/";
public static String youanadd =youanapi+"/app/patientcase/add";
public static String youanupdate =youanapi+"/app/patientcase/update";
public static String youanupdate1 =youanapi+"/app/patientcase/updateBaseInfo";
public static String youanpatientcase =youanapi+"/app/patientcase/list";
public static String getPatientcaseTree =youanapi+"/app/patientcase/getPatientcaseTree/";
public static String freezeData =youanapi+"/app/patientcase/freezeData/";
public static String getBaseInfo =youanapi+"/app/patientcase/getBaseInfo/";
public static String getDayEcharsData=youanapi+"/app/statistics/getDayEcharsData";
public static String getAnalysisEcharsData=youanapi+"/app/statistics/getAnalysisEcharsData";
public static String rankingListByHospital=youanapi+"/app/patientcase/rankingListByHospital";
public static String rankingListByUser=youanapi+"/app/patientcase/rankingListByUser";
public static String generatePresignedUrl=youanapi+"/app/file/generatePresignedUrl";
public static String endpoingetDetail=youanapi+"/app/endpoin/getDetail/";
public static String endpoingetdelete=youanapi+"/app/endpoin/delete/";
public static String endpoingetadd=youanapi+"/app/endpoin/add";
public static String yongyaogetDetail=youanapi+"/app/yongyao/getDetail/";
public static String yongyaoupdate=youanapi+"/app/yongyao/update";
public static String suifanggetDetail=youanapi+"/app/suifang/getDetail/";
public static String suifangupdate=youanapi+"/app/suifang/update";
public static String suifangHbvSymbol=youanapi+"/app/suifangHbvSymbol/getDetail/";
public static String suifangHbvSymbolupdate=youanapi+"/app/suifangHbvSymbol/update";
public static String suifangLiverFunction=youanapi+"/app/suifangLiverFunction/getDetail/";
public static String suifangLiverFunctionupdate=youanapi+"/app/suifangLiverFunction/update";
public static String suifangCT=youanapi+"/app/suifangCT/getDetail/";
public static String suifangCTupdate=youanapi+"/app/suifangCT/update";
public static String suifangLiverElasticity=youanapi+"/app/suifangLiverElasticity/getDetail/";
public static String suifangLiverElasticityupdate=youanapi+"/app/suifangLiverElasticity/update";
public static String suifangadd=youanapi+"/app/suifang/add";
public static String endpointImgupdate=youanapi+"/app/endpointImg/update";
public static String refreshDataStatus=youanapi+"/app/suifang/refreshDataStatus/";
public static String getTagToken=urlmyLan+"getTagToken";//画像系统
public static String checkUser=urlmyLan+"checkUser";//检查账户
}
@@ -0,0 +1,159 @@
package cn.shangyu.gdxzExpert.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static cn.shangyu.gdxzExpert.utils.StringUtil.isEmpty;
/**
*
* ValidateUtils.java
*
* @author gaofei
* @date 2015-9-6 下午7:32:18 Copyright (C) 2015 河南商宇科技有限公司
*
* 功能说明:判断手机号码是否合法
*/
public class ValidateUtils {
/**
* 验证手机号码
*
* @param mobiles
*/
public static boolean isMobileNum(String mobiles) {
Pattern p = Pattern.compile("^(1[3-9])[0-9]{9}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
/**
* 验证固定号码
*
* @param mobiles
*/
public static boolean isPhoneNum(String mobiles) {
Pattern p = Pattern.compile("^(0(\\d{2,3}))(\\d{7,8})$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
/**
* 验证手机号码和固定号码
*
* @param mobiles
*/
public static boolean isPhoneAndMobile(String mobiles) {
// ^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$
// ^(0(\\d{2,3}))(\\d{7,8})|(1[3-9][0-9]{9})$
// ^(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$
Pattern p = Pattern
.compile("^(1[3-9])[0-9]{9}$");
Matcher m = p.matcher(mobiles);
return m.matches();
}
/**
* 验证密码为数字与字母组合
*
* @param mobiles
*/
public static boolean isPassword(String password) {
String str = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$";
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(password);
return m.matches();
}
/**
* 验证密码为数字与字母组合
*
* @param mobiles
*/
public static boolean isCardPassword(String password) {
String str = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{16}$";
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(password);
return m.matches();
}
/**
* 是否是税号
* @param num
* @return
*/
public static Boolean isTaxNumber(String num)
{
if(isEmpty(num))
{
return false;
}
else
{
String str = "^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$";
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(num);
return m.matches();
}
}
/**
* 验证邮箱 isValidEmail
*
* @param mail
* @return boolean
*/
public static boolean isValidEmail(String email) {
String str = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
Pattern p = Pattern.compile(str);
Matcher m = p.matcher(email);
return m.matches();
}
public static void main(String[] args) {
String mobile = "fjlkadjlkfjlakjflkdjaojfoijapo";
}
/**
*
* @param 是否包含汉字
* @return
*/
public static boolean isContainChinese(String str) {
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
return false;
}
/**
* 正则表达式:验证身份证
*/
public static final String REGEX_ID_CARD = "(^\\d{15}$)|(^ {17}([0-9]|X)$)";
// 15位数身份证验证正则表达式:
public static String isIDCard1 = "^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$";
// 18位数身份证验证正则表达式 :
public static String isIDCard2 = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
public static boolean isCardId(String str) {
if (str.length() == 15) {
Pattern p = Pattern.compile(isIDCard1);
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
} else if (str.length() == 18) {
Pattern p = Pattern.compile(isIDCard2);
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
}
return false;
}
}
@@ -0,0 +1,122 @@
package cn.shangyu.gdxzExpert.utils;
/**
* Created by WANGChengXin on 2019/11/15.
*/
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.net.wifi.WifiManager;
import org.apache.http.HttpHost;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import java.security.KeyStore;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;
/**
* 避免HttpClient的”SSLPeerUnverifiedException: peer not authenticated”异常
* 不用导入SSL证书
* @author shipengzhi(shipengzhi@sogou-inc.com)
*
*/
public class WebClientDevWrapper {
public static org.apache.http.client.HttpClient wrapClient(org.apache.http.client.HttpClient base) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain,
String authType)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
};
ctx.init(null, new TrustManager[] { tm }, null);
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory ssf = new SSLSocketFactory(trustStore);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = base.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
//设置要使用的端口,默认是443
sr.register(new Scheme("https", ssf, 443));
sr.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
// ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, sr);
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params,5000);
HttpClient client = new DefaultHttpClient(ccm, params);
WifiManager wifiManager = (WifiManager) UIUtils.getContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
// 获取当前正在使用的APN接入点
Uri uri = Uri.parse("content://telephony/carriers/preferapn");
Cursor mCursor = UIUtils.getContext().getContentResolver().query(uri, null, null, null, null);
if (mCursor != null && mCursor.moveToFirst()) {
// 游标移至第一条记录,当然也只有一条
String proxyStr = mCursor.getString(mCursor.getColumnIndex("proxy"));
if (proxyStr != null && proxyStr.trim().length() > 0) {
HttpHost proxy = new HttpHost(proxyStr, 80);
client.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, proxy);
}
mCursor.close();
}
}
return client;
// return new DefaultHttpClient(ccm, base.getParams());
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}