877 lines
33 KiB
Java
877 lines
33 KiB
Java
package com.info.sn.utils;
|
||
|
||
import android.annotation.SuppressLint;
|
||
import android.app.admin.DevicePolicyManager;
|
||
import android.content.ActivityNotFoundException;
|
||
import android.content.ComponentName;
|
||
import android.content.Context;
|
||
import android.content.Intent;
|
||
import android.content.SharedPreferences;
|
||
import android.content.pm.ApplicationInfo;
|
||
import android.content.pm.PackageInfo;
|
||
import android.content.pm.PackageManager;
|
||
import android.content.pm.PackageManager.NameNotFoundException;
|
||
import android.content.pm.ResolveInfo;
|
||
import android.content.res.Resources;
|
||
import android.graphics.Bitmap;
|
||
import android.graphics.BitmapFactory;
|
||
import android.graphics.Canvas;
|
||
import android.graphics.Paint;
|
||
import android.graphics.PorterDuff;
|
||
import android.graphics.PorterDuffXfermode;
|
||
import android.net.ConnectivityManager;
|
||
import android.net.NetworkInfo;
|
||
import android.net.Uri;
|
||
import android.net.wifi.WifiInfo;
|
||
import android.net.wifi.WifiManager;
|
||
import android.os.Build;
|
||
import android.provider.Settings;
|
||
import android.telephony.TelephonyManager;
|
||
import android.text.TextUtils;
|
||
import android.util.Log;
|
||
import android.view.MotionEvent;
|
||
import android.view.View;
|
||
import android.view.inputmethod.InputMethodManager;
|
||
import android.widget.EditText;
|
||
import android.widget.Toast;
|
||
|
||
import com.google.zxing.BarcodeFormat;
|
||
import com.google.zxing.EncodeHintType;
|
||
import com.google.zxing.WriterException;
|
||
import com.google.zxing.common.BitMatrix;
|
||
import com.google.zxing.qrcode.QRCodeWriter;
|
||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
||
import com.info.sn.MyApplication;
|
||
import com.info.sn.R;
|
||
|
||
import java.io.FileReader;
|
||
import java.io.InputStreamReader;
|
||
import java.io.LineNumberReader;
|
||
import java.io.Reader;
|
||
import java.lang.reflect.Method;
|
||
import java.net.NetworkInterface;
|
||
import java.security.MessageDigest;
|
||
import java.security.NoSuchAlgorithmException;
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.Calendar;
|
||
import java.util.Collections;
|
||
import java.util.Date;
|
||
import java.util.HashMap;
|
||
import java.util.List;
|
||
import java.util.Map;
|
||
|
||
|
||
public class Utils {
|
||
|
||
|
||
public static final String PACKAGE = "appstore";
|
||
public static final String DOWNLOAD_STARTALL_ACTION = PACKAGE + "_startall"; // 开始所有任务
|
||
public static final String DOWNLOAD_DELETE_UPDATE_ACTION = PACKAGE + "_download_update_delete"; // 删除应用更新文件
|
||
public static final String DOWNLOAD_DELETEALL_ACTION = PACKAGE + "_deleteall_alltask"; // 删除所有任务
|
||
public static final String DOWNLOAD_ALLTASK_ACTION = PACKAGE + "_download_alltask"; // 获取所有任务
|
||
public static final String DOWNLOAD_START_ACTION = PACKAGE + "_download_start"; // 下载标识
|
||
public static final String DOWNLOAD_STOP_ACTION = PACKAGE + "_download_stop"; // 暂停标识
|
||
public static final String DOWNLOAD_DELETE_PACKAGENAME_ACTION = PACKAGE + "_download_packagename_delete"; // 删除标识 根据包名
|
||
public static final String DOWNLOAD_DELETE_URL_ACTION = PACKAGE + "_download_url_delete"; // 删除标识 根据下载地址
|
||
public static final String DOWNLOAD_INITIALIZE_ACTION = PACKAGE + "_download_initialize"; // item初始化状态
|
||
public static final String DOWNLOAD_PACKAGENAME_ACTION = PACKAGE + "_download_packagename"; // item初始化状态 包名
|
||
public static final String DOWNLOAD_SERVICE_ACTION = PACKAGE + "_download_service"; // 下载状态回调服务
|
||
|
||
public static final String DOWNLOAD_ALLSERVICE_ACTION = PACKAGE + "_download_allservice"; // 返回所有下载任务
|
||
public static final String DOWNLOAD_NEWSERVICE_ACTION = PACKAGE + "_download_newservice"; // 一个新的下载任务
|
||
|
||
// JPush 推送消息
|
||
public static final String MESSAGE_RECEIVED_ACTION = "com.appstore.jpushdemo.MESSAGE_RECEIVED_ACTION";
|
||
public static final String KEY_TITLE = "title"; // 消息标题
|
||
public static final String KEY_MESSAGE = "message"; // 消息内容
|
||
public static final String KEY_EXTRAS = "extras"; // 消息内容类型
|
||
public static final String KEY_TYPE = "type"; // 消息内容类型
|
||
|
||
|
||
public static final String ACTION_PACKAGE_REPLACED = PACKAGE + "PACKAGE_REPLACED"; // 替换应用
|
||
public static final String ACTION_PACKAGE_REMOVED = PACKAGE + "PACKAGE_REMOVED"; // 卸载应用
|
||
public static final String ACTION_PACKAGE_ADDED = PACKAGE + "PACKAGE_ADDED"; // 安装应用
|
||
|
||
// public static int[] babyImage = {R.drawable.language, R.drawable.habit, R.drawable.knowledge, R.drawable.security, R.drawable.promotion};
|
||
// public static int[] childImage = {R.drawable.yuwen, R.drawable.shuxue, R.drawable.yingyu, R.drawable.qingshang, R.drawable.yishu, R.drawable.promotion};
|
||
// public static int[] youngImage = {R.drawable.yuwen, R.drawable.shuxue, R.drawable.yingyu, R.drawable.promotion};
|
||
// 学习日志上传标识
|
||
public static final String APP_LRARNLOG = "com.colorflykids.alarm";
|
||
// 学习日志下载标识
|
||
public static final String APP_DOWNLOADLEARNLOG = "com.colorflykids.downloadlearnlog";
|
||
// 账号注销标识
|
||
public static final String APP_USERLOGOUT = "com.colorflykids.userlogout";
|
||
|
||
|
||
public static final String UPDATE_SYSTEMUI = "cn.colorflykids.UPDATE_SYSTEMUI";
|
||
public static final int COUNT_ONE_PAGE = 8;
|
||
public static final int COUNT_ONE_PAGE2 = 10;
|
||
public static final String YOUNGSYSTEM_APP_TONGBU = "com.school.app.syn"; // 小学系统 同步教材app
|
||
/**
|
||
*
|
||
*/
|
||
public static final String number[] = {
|
||
"1", "2", "3", "4", "5", "6", "7",
|
||
"8", "9", "10", "0", "11"};
|
||
public static final String STORE = "store";
|
||
public static final String CATEGORY_THREE = "3";
|
||
public static final String CATEGORY_SIX = "6";
|
||
public static final String CATEGORY_UPSIX = "10";
|
||
public static final String CLOSE_REST_WINDOW = "colse_rest_window";
|
||
public static final String STOP_LOOPING_TIMER = "stop_looping_timer";
|
||
public static final String START_LOOPING_TIMER = "start_looping_timer";
|
||
public static String DOWNLOADAPP_CALLBACK = "com.colorflykids.downloadapp"; // 子界面下载回调 提示更新UI
|
||
public static String MENU_YOUYOU = "youyou";
|
||
public static String MENU_LANGUAGE = "语言启蒙";
|
||
public static String MENU_HABIT = "行为习惯";
|
||
public static String MENU_KNOWLEDGE = "生活认知";
|
||
public static String MENU_SECURITY = "安全自理";
|
||
public static String MENU_PROMOTION = "入园-综合提升";
|
||
public static String MENU_LY = "优优乐园";
|
||
public static String MENU_YW = "语文知识";
|
||
public static String MENU_SX = "数理逻辑";
|
||
public static String MENU_YY = "英语启蒙";
|
||
public static String MENU_QS = "情商培养";
|
||
public static String MENU_YS = "艺术提升";
|
||
public static String MENU_ZH = "学前-综合提升";
|
||
public static String MENU_TONGBUJIAOCAI = "同步教材";
|
||
public static String MENU_YUWEN = "语文";
|
||
public static String MENU_SHUXUE = "数学";
|
||
public static String MENU_YINGYU = "英语";
|
||
public static String MENU_ZONGHETISHEGN = "小学-综合提升";
|
||
public static String[] babySystem = {MENU_LANGUAGE, MENU_HABIT, MENU_KNOWLEDGE, MENU_SECURITY, MENU_PROMOTION};
|
||
public static String[] childSystem = {MENU_LY, MENU_YW, MENU_SX, MENU_YY, MENU_QS, MENU_YS, MENU_ZH};
|
||
public static String[] youngSystem = {MENU_YUWEN, MENU_SHUXUE, MENU_YINGYU, MENU_ZONGHETISHEGN};
|
||
|
||
|
||
public static String[] sonSystem = {MENU_HABIT, MENU_SECURITY, MENU_LANGUAGE, MENU_KNOWLEDGE, MENU_PROMOTION,
|
||
MENU_LY, MENU_YW, MENU_SX, MENU_YY, MENU_QS, MENU_YS, MENU_ZH,
|
||
MENU_TONGBUJIAOCAI, MENU_YUWEN, MENU_SHUXUE, MENU_YINGYU, MENU_YINGYU, MENU_ZONGHETISHEGN};
|
||
public static String[][] tagList = {babySystem, childSystem, youngSystem};
|
||
public static String subcategories[][] = {babySystem, childSystem, youngSystem};
|
||
public static String system[] = {"入园系统", "学前系统", "小学系统"};
|
||
public static String systemandno[] = {"入园系统", "学前系统", "小学系统", "未分配"};
|
||
protected static Toast toast = null;
|
||
private static String oldMsg;
|
||
private static long oneTime = 0;
|
||
private static long twoTime = 0;
|
||
|
||
|
||
// 积分记录 达人标准次数记录
|
||
|
||
|
||
// MD5 设备地址标识
|
||
public static String getMAC(Context context) {
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 如果当前设备系统大于等于6.0 使用下面的方法
|
||
return getMac();
|
||
} else {
|
||
try {
|
||
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||
// 获取MAC地址
|
||
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
|
||
String mac = wifiInfo.getMacAddress();
|
||
if (null == mac) {
|
||
// 未获取到
|
||
mac = "";
|
||
}
|
||
return mac;
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
return "";
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取手机的MAC地址
|
||
*
|
||
* @return
|
||
*/
|
||
public static String getMac() {
|
||
String str = "";
|
||
String macSerial = "";
|
||
try {
|
||
Process pp = Runtime.getRuntime().exec(
|
||
"cat /sys/class/net/wlan0/address");
|
||
InputStreamReader ir = new InputStreamReader(pp.getInputStream());
|
||
LineNumberReader input = new LineNumberReader(ir);
|
||
for (; null != str; ) {
|
||
str = input.readLine();
|
||
if (str != null) {
|
||
macSerial = str.trim();// 去空格
|
||
break;
|
||
}
|
||
}
|
||
} catch (Exception ex) {
|
||
ex.printStackTrace();
|
||
}
|
||
if (macSerial == null || "".equals(macSerial)) {
|
||
try {
|
||
return loadFileAsString("/sys/class/net/eth0/address")
|
||
.toUpperCase().substring(0, 17);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
macSerial = getAndroid7MAC();
|
||
}
|
||
}
|
||
return macSerial;
|
||
}
|
||
|
||
/**
|
||
* 兼容7.0获取不到的问题
|
||
*
|
||
* @return
|
||
*/
|
||
public static String getAndroid7MAC() {
|
||
try {
|
||
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
|
||
for (NetworkInterface nif : all) {
|
||
if (!nif.getName().equalsIgnoreCase("wlan0"))
|
||
continue;
|
||
byte[] macBytes = nif.getHardwareAddress();
|
||
if (macBytes == null) {
|
||
return "";
|
||
}
|
||
StringBuilder res1 = new StringBuilder();
|
||
for (byte b : macBytes) {
|
||
res1.append(String.format("%02X:", b));
|
||
}
|
||
if (res1.length() > 0) {
|
||
res1.deleteCharAt(res1.length() - 1);
|
||
}
|
||
return res1.toString();
|
||
}
|
||
} catch (Exception ex) {
|
||
}
|
||
return "";
|
||
}
|
||
|
||
public static String loadFileAsString(String fileName) throws Exception {
|
||
FileReader reader = new FileReader(fileName);
|
||
String text = loadReaderAsString(reader);
|
||
reader.close();
|
||
return text;
|
||
}
|
||
|
||
public static String loadReaderAsString(Reader reader) throws Exception {
|
||
StringBuilder builder = new StringBuilder();
|
||
char[] buffer = new char[4096];
|
||
int readLength = reader.read(buffer);
|
||
while (readLength >= 0) {
|
||
builder.append(buffer, 0, readLength);
|
||
readLength = reader.read(buffer);
|
||
}
|
||
return builder.toString();
|
||
}
|
||
|
||
|
||
// MD5 设备地址标识
|
||
public static String getMD5(Context context) {
|
||
String WLANMAC = getMAC(context);
|
||
// compute md5
|
||
MessageDigest m = null;
|
||
try {
|
||
m = MessageDigest.getInstance("MD5");
|
||
} catch (NoSuchAlgorithmException e) {
|
||
e.printStackTrace();
|
||
}
|
||
if (WLANMAC != null && !WLANMAC.equals("")) {
|
||
m.update(WLANMAC.getBytes(), 0, WLANMAC.length());
|
||
} else if (getSimSerialNumber(context) != null && !getSimSerialNumber(context).equals("")) {
|
||
m.update(getSimSerialNumber(context).getBytes(), 0, getSimSerialNumber(context).length());
|
||
} else {
|
||
m.update(getPesudoUniqueID().getBytes(), 0, getPesudoUniqueID().length());
|
||
}
|
||
// get md5 bytes
|
||
byte p_md5Data[] = m.digest();
|
||
// create a hex string
|
||
String m_szUniqueID = new String();
|
||
for (int i = 0; i < p_md5Data.length; i++) {
|
||
int b = (0xFF & p_md5Data[i]);
|
||
// if it is a single digit, make sure it have 0 in front (proper padding)
|
||
if (b <= 0xF)
|
||
m_szUniqueID += "0";
|
||
// add number to string
|
||
m_szUniqueID += Integer.toHexString(b);
|
||
} // hex string to uppercase
|
||
m_szUniqueID = m_szUniqueID.toUpperCase();
|
||
return m_szUniqueID;
|
||
}
|
||
|
||
private static String getSimSerialNumber(Context context) {
|
||
|
||
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||
|
||
@SuppressLint("MissingPermission") String simSerialNumber = tm.getSimSerialNumber();
|
||
return simSerialNumber;
|
||
}
|
||
|
||
|
||
private static String getPesudoUniqueID() {
|
||
String m_szDevIDShort = "35" + //we make this look like a valid IMEI
|
||
Build.BOARD.length() % 10 +
|
||
Build.BRAND.length() % 10 +
|
||
Build.CPU_ABI.length() % 10 +
|
||
Build.DEVICE.length() % 10 +
|
||
Build.DISPLAY.length() % 10 +
|
||
Build.HOST.length() % 10 +
|
||
Build.ID.length() % 10 +
|
||
Build.MANUFACTURER.length() % 10 +
|
||
Build.MODEL.length() % 10 +
|
||
Build.PRODUCT.length() % 10 +
|
||
Build.TAGS.length() % 10 +
|
||
Build.TYPE.length() % 10 +
|
||
Build.USER.length() % 10;
|
||
return m_szDevIDShort;
|
||
}
|
||
|
||
|
||
// 防止连续点击
|
||
private static long lastClickTime;
|
||
|
||
public static boolean isFastDoubleClick() {
|
||
long time = System.currentTimeMillis();
|
||
long timeD = time - lastClickTime;
|
||
if (0 < timeD && timeD < 500) {
|
||
return true;
|
||
}
|
||
lastClickTime = time;
|
||
return false;
|
||
}
|
||
|
||
// 5分钟 = 1 转换成时间
|
||
public static String getRangeTime(int range) {
|
||
StringBuffer sBuffer = new StringBuffer();
|
||
String hour;
|
||
String minute;
|
||
if ((range / 12) >= 10) {
|
||
hour = range / 12 + "";
|
||
} else {
|
||
hour = "0" + range / 12 + "";
|
||
}
|
||
if ((range % 12) > 0) {
|
||
minute = ":" + range % 12 / 2 + "0";
|
||
} else {
|
||
minute = ":00";
|
||
}
|
||
sBuffer.append(hour.trim());
|
||
sBuffer.append(minute.trim());
|
||
return sBuffer.toString();
|
||
}
|
||
|
||
|
||
// 根据日期取得星期几
|
||
public static String getWeek(Date date) {
|
||
String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
|
||
Calendar cal = Calendar.getInstance();
|
||
cal.setTime(date);
|
||
int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
|
||
if (week_index < 0) {
|
||
week_index = 0;
|
||
}
|
||
return weeks[week_index];
|
||
}
|
||
|
||
|
||
// 非空判断
|
||
public static boolean isEmpty(String s) {
|
||
if (null == s)
|
||
return true;
|
||
if (s.length() == 0)
|
||
return true;
|
||
if (s.trim().length() == 0)
|
||
return true;
|
||
return false;
|
||
}
|
||
|
||
// 手动隐藏键盘
|
||
public static void CloseKeyBoard(Context context) {
|
||
InputMethodManager imm = (InputMethodManager) context
|
||
.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||
System.out.println("isActive:" + imm.isActive());
|
||
if (imm.isActive()) {
|
||
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
|
||
InputMethodManager.HIDE_NOT_ALWAYS);
|
||
}
|
||
}
|
||
|
||
// 接受软键盘输入
|
||
public static void hideKeyboard(Context context, View view) {
|
||
if (context == null || view == null) {
|
||
return;
|
||
}
|
||
InputMethodManager imm = (InputMethodManager) context
|
||
.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||
}
|
||
|
||
// 卸载app
|
||
public static void unInstallAPP(Context context, String packageName) {
|
||
if (!TextUtils.isEmpty(packageName) && !AppsManagerUtils.isSystemApp(context, packageName)) {
|
||
if (AppsManagerUtils.isSystemApp(context, packageName)) {
|
||
ToastUtil.show("系统应用无法卸载!");
|
||
} else {
|
||
Uri packageURI = Uri.parse("package:" + packageName);
|
||
Intent intent = new Intent(Intent.ACTION_DELETE, packageURI);
|
||
context.startActivity(intent);
|
||
}
|
||
} else {
|
||
ToastUtil.show("系统应用无法卸载!");
|
||
}
|
||
}
|
||
|
||
// 打开app
|
||
public static void startApp(Context context, String packageName,
|
||
String activityName) {
|
||
|
||
if (TextUtils.isEmpty(packageName))
|
||
return;
|
||
|
||
try {
|
||
Intent intent = null;
|
||
if (TextUtils.isEmpty(activityName)) {
|
||
intent = context.getPackageManager().getLaunchIntentForPackage(
|
||
packageName);
|
||
} else {
|
||
intent = new Intent();
|
||
intent.setComponent(new ComponentName(packageName, activityName));
|
||
}
|
||
if (intent == null) {
|
||
intent = getLaunchIntentForNoCategory(context, packageName);
|
||
}
|
||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||
context.startActivity(intent);
|
||
} catch (ActivityNotFoundException e) {
|
||
e.printStackTrace();
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
|
||
public static Intent getLaunchIntentForNoCategory(Context context,
|
||
String packageName) {
|
||
Intent intent = null;
|
||
|
||
PackageManager packageManager = context.getPackageManager();
|
||
PackageInfo packageinfo = null;
|
||
try {
|
||
packageinfo = packageManager.getPackageInfo(packageName, 0);
|
||
} catch (NameNotFoundException e) {
|
||
e.printStackTrace();
|
||
}
|
||
if (packageinfo == null) {
|
||
return null;
|
||
}
|
||
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
|
||
resolveIntent.setPackage(packageinfo.packageName);
|
||
List<ResolveInfo> resolveinfoList = packageManager
|
||
.queryIntentActivities(resolveIntent, 0);
|
||
|
||
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
|
||
if (resolveinfo != null) {
|
||
String className = resolveinfo.activityInfo.name;
|
||
intent = new Intent(Intent.ACTION_MAIN);
|
||
intent.addCategory(Intent.CATEGORY_LAUNCHER);
|
||
ComponentName cn = new ComponentName(packageName, className);
|
||
intent.setComponent(cn);
|
||
}
|
||
return intent;
|
||
}
|
||
|
||
// 设置系统亮度模式
|
||
public static void systemBrightness(Context context) {
|
||
try {
|
||
SharedPreferences mPrefs = context.getSharedPreferences("colorflykids", 0);
|
||
boolean initSetting = mPrefs.getBoolean("init_setting", true);
|
||
if (initSetting) {
|
||
mPrefs.edit().putBoolean("init_setting", false).commit();
|
||
}
|
||
Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
|
||
mPrefs.edit().putBoolean("first_init", false).commit();
|
||
|
||
} catch (Exception err) {
|
||
err.printStackTrace();
|
||
}
|
||
}
|
||
|
||
// 更新 版本比较
|
||
public static boolean isUpdate(String oldVersion, String newVersion) {
|
||
if (TextUtils.isEmpty(oldVersion) || TextUtils.isEmpty(newVersion) || oldVersion.equals(newVersion)) {
|
||
return false;
|
||
}
|
||
String[] oldVersionSp = oldVersion.replaceAll("[^.\\d]", "").trim().split("\\.");
|
||
String[] newVsersionSp = newVersion.replaceAll("[^.\\d]", "").trim().split("\\.");
|
||
int index = 0;
|
||
int minLen = Math.min(oldVersionSp.length, newVsersionSp.length);
|
||
int diff = 0;
|
||
while (index < minLen && (diff = Integer.parseInt(newVsersionSp[index]) - Integer.parseInt(oldVersionSp[index])) == 0) {
|
||
index++;
|
||
}
|
||
if (diff == 0) {
|
||
for (int i = index; i < oldVersionSp.length; i++) {
|
||
if (Integer.parseInt(oldVersionSp[i]) > 0) {
|
||
return false;
|
||
}
|
||
}
|
||
for (int i = index; i < newVsersionSp.length; i++) {
|
||
if (Integer.parseInt(newVsersionSp[i]) > 0) {
|
||
return true;
|
||
}
|
||
}
|
||
} else {
|
||
return diff > 0 ? true : false;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/***
|
||
* 半角转换为全角
|
||
*
|
||
* @param input
|
||
* @return
|
||
*/
|
||
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);
|
||
}
|
||
|
||
public static void showToast(Context context, String s) {
|
||
if (toast == null) {
|
||
toast = Toast.makeText(context, s, Toast.LENGTH_SHORT);
|
||
toast.show();
|
||
oneTime = System.currentTimeMillis();
|
||
} else {
|
||
twoTime = System.currentTimeMillis();
|
||
if (s.equals(oldMsg)) {
|
||
if (twoTime - oneTime > Toast.LENGTH_SHORT) {
|
||
toast.show();
|
||
}
|
||
} else {
|
||
oldMsg = s;
|
||
toast.setText(s);
|
||
toast.show();
|
||
}
|
||
}
|
||
oneTime = twoTime;
|
||
}
|
||
|
||
public static boolean isShouldHideInput(View v, MotionEvent event) {
|
||
if (v != null && (v instanceof EditText)) {
|
||
int[] leftTop = {0, 0};
|
||
//获取输入框当前的location位置
|
||
v.getLocationInWindow(leftTop);
|
||
int left = leftTop[0];
|
||
int top = leftTop[1];
|
||
int bottom = top + v.getHeight();
|
||
int right = left + v.getWidth();
|
||
if (event.getX() > left && event.getX() < right
|
||
&& event.getY() > top && event.getY() < bottom) {
|
||
// 点击的是输入框区域,保留点击EditText的事件
|
||
return false;
|
||
} else {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public static boolean isIntent(Context context) {
|
||
|
||
ConnectivityManager manager = (ConnectivityManager) context
|
||
.getApplicationContext().getSystemService(
|
||
Context.CONNECTIVITY_SERVICE);
|
||
if (manager == null) {
|
||
return false;
|
||
}
|
||
// 检查网络连接,如果无网络可用,就不需要进行连网操作等
|
||
NetworkInfo networkinfo = manager.getActiveNetworkInfo();
|
||
|
||
if (networkinfo == null || !networkinfo.isAvailable()) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
public static String getTime(int time) {
|
||
int min = time / 60;
|
||
int sec = time % 60;
|
||
if (sec > 0) {
|
||
return String.valueOf(min + 1);
|
||
} else {
|
||
return String.valueOf(min);
|
||
}
|
||
}
|
||
|
||
public static String getTimeClick(int time) {
|
||
StringBuffer timeClick = new StringBuffer();
|
||
int min = time / 60;
|
||
int sec = time % 60;
|
||
timeClick.append(min >= 10 ? (int) Math.ceil(min / 10) : 0)
|
||
.append(min % 10)
|
||
.append(":")
|
||
.append(sec >= 10 ? (int) Math.ceil(sec / 10) : 0)
|
||
.append(sec % 10);
|
||
return timeClick.toString();
|
||
}
|
||
|
||
|
||
public static String getVersionName(Context context) {
|
||
// 获取packagemanager的实例
|
||
PackageManager packageManager = context.getPackageManager();
|
||
// getPackageName()是你当前类的包名,0代表是获取版本信息
|
||
PackageInfo packInfo;
|
||
try {
|
||
packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
|
||
String version = packInfo.versionName.replaceAll("[a-zA-Z]", "").trim();
|
||
;
|
||
return version;
|
||
} catch (NameNotFoundException e) {
|
||
// TODO Auto-generated catch block
|
||
e.printStackTrace();
|
||
}
|
||
return "";
|
||
}
|
||
|
||
|
||
/**
|
||
* 根据手机的分辨率从 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 float dp2px(Resources resources, float dp) {
|
||
final float scale = resources.getDisplayMetrics().density;
|
||
return dp * scale + 0.5f;
|
||
}
|
||
|
||
public static float sp2px(Resources resources, float sp) {
|
||
final float scale = resources.getDisplayMetrics().scaledDensity;
|
||
return sp * scale;
|
||
}
|
||
|
||
public static String getTime() {
|
||
long time = System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis();
|
||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
||
Date d1 = new Date(time);
|
||
String t1 = format.format(d1);
|
||
return t1;
|
||
}
|
||
|
||
|
||
private static void getAdmin(Context context, ComponentName componentName) {
|
||
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
|
||
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
|
||
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "宏云萌书院OS");
|
||
context.startActivity(intent);
|
||
}
|
||
|
||
/**
|
||
* 获取设备序列号
|
||
*
|
||
* @return
|
||
*/
|
||
@SuppressLint({"MissingPermission", "NewApi"})
|
||
public static String getSerial() {
|
||
String serial = "unknow";
|
||
try {
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {//9.0+
|
||
serial = Build.getSerial();
|
||
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {//8.0+
|
||
serial = Build.SERIAL;
|
||
} else {//8.0-
|
||
Class<?> c = Class.forName("android.os.SystemProperties");
|
||
Method get = c.getMethod("get", String.class);
|
||
serial = (String) get.invoke(c, "ro.serialno");
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
Log.e("e", "读取设备序列号异常:" + e.toString());
|
||
}
|
||
return serial;
|
||
}
|
||
|
||
public static final long A_GB = 1073741824;
|
||
public static final long A_MB = 1048576;
|
||
public static final int A_KB = 1024;
|
||
|
||
public static String fmtSpace(long space) {
|
||
if (space <= 0) {
|
||
return "0";
|
||
}
|
||
double gbValue = (double) space / A_GB;
|
||
if (gbValue >= 1) {
|
||
return String.format("%.2fGB", gbValue);
|
||
} else {
|
||
double mbValue = (double) space / A_MB;
|
||
// Log.e("GB", "gbvalue=" + mbValue);
|
||
if (mbValue >= 1) {
|
||
return String.format("%.2fMB", mbValue);
|
||
} else {
|
||
final double kbValue = space / A_KB;
|
||
return String.format("%.2fKB", kbValue);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
public static String transferLongToDate(Long millSec) {
|
||
|
||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||
|
||
Date date = new Date(millSec);
|
||
|
||
return sdf.format(date);
|
||
|
||
}
|
||
|
||
public static String getSn() {
|
||
return Build.SERIAL;
|
||
}
|
||
|
||
public static Bitmap createQRImage(String content, int widthPix, int heightPix) {
|
||
try {
|
||
// if (content == null || "".equals(content)) {
|
||
// return false;
|
||
// }
|
||
|
||
//配置参数
|
||
Map<EncodeHintType, Object> hints = new HashMap<>();
|
||
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
|
||
//容错级别
|
||
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
|
||
//设置空白边距的宽度
|
||
hints.put(EncodeHintType.MARGIN, 1); //default is 4
|
||
|
||
// 图像数据转换,使用了矩阵转换
|
||
BitMatrix bitMatrix = null;
|
||
try {
|
||
bitMatrix = new QRCodeWriter().encode(content, BarcodeFormat.QR_CODE, widthPix,
|
||
heightPix, hints);
|
||
} catch (WriterException e) {
|
||
e.printStackTrace();
|
||
}
|
||
int[] pixels = new int[widthPix * heightPix];
|
||
// 下面这里按照二维码的算法,逐个生成二维码的图片,
|
||
// 两个for循环是图片横列扫描的结果
|
||
for (int y = 0; y < heightPix; y++) {
|
||
for (int x = 0; x < widthPix; x++) {
|
||
if (bitMatrix.get(x, y)) {
|
||
pixels[y * widthPix + x] = 0xff000000;
|
||
} else {
|
||
pixels[y * widthPix + x] = 0xffffffff;
|
||
}
|
||
}
|
||
}
|
||
|
||
// 生成二维码图片的格式,使用ARGB_8888
|
||
Bitmap bitmap = Bitmap.createBitmap(widthPix, heightPix, Bitmap.Config.ARGB_8888);
|
||
bitmap.setPixels(pixels, 0, widthPix, 0, 0, widthPix, heightPix);
|
||
//
|
||
// if (logoBm != null) {
|
||
// bitmap = addLogo(bitmap, logoBm);
|
||
// }
|
||
|
||
//必须使用compress方法将bitmap保存到文件中再进行读取。直接返回的bitmap是没有任何压缩的,
|
||
// 内存消耗巨大!
|
||
return bitmap;
|
||
// return bitmap != null && bitmap.compress(Bitmap.CompressFormat.JPEG, 100);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
//判断是否为系统应用
|
||
public static boolean isSystemApp(Context context, String pkgName) {
|
||
boolean isSystemApp = false;
|
||
PackageInfo pi = null;
|
||
try {
|
||
PackageManager pm = context.getPackageManager();
|
||
pi = pm.getPackageInfo(pkgName, 0);
|
||
} catch (NameNotFoundException e) {
|
||
e.printStackTrace();
|
||
Log.e("isSystemApp", e.getMessage(), e);
|
||
|
||
}
|
||
|
||
// 是系统中已安装的应用
|
||
if (pi != null) {
|
||
boolean isSysApp = (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1;
|
||
boolean isSysUpd = (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1;
|
||
isSystemApp = isSysApp || isSysUpd;
|
||
}
|
||
return isSystemApp;
|
||
}
|
||
|
||
public static Bitmap getRoundedBitmap(Bitmap mBitmap, Context context) {
|
||
Bitmap bgBitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888);
|
||
|
||
|
||
Bitmap mask = BitmapFactory.decodeResource(context.getResources(), R.drawable.mask);
|
||
int width = mask.getWidth();
|
||
int height = mask.getHeight();
|
||
Bitmap bitmapScale = Bitmap.createScaledBitmap(mBitmap, width, height, true);
|
||
|
||
// Palette p = Palette.from(mBitmap).generate();
|
||
// Palette.Swatch vibrant = p.getVibrantSwatch();//有活力的
|
||
// int color = vibrant.getRgb(); //样本中的像素数量
|
||
|
||
Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||
Canvas canvas = new Canvas();
|
||
Paint paint = new Paint();
|
||
|
||
canvas.setBitmap(result);
|
||
// canvas.drawColor(color);
|
||
canvas.drawBitmap(mask, 0, 0, paint);
|
||
// paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||
canvas.drawBitmap(bitmapScale, 0, 0, paint);
|
||
// return result;
|
||
|
||
Bitmap result2 = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||
Canvas canvas2 = new Canvas();
|
||
Paint paint2 = new Paint();
|
||
canvas2.setBitmap(result2);
|
||
canvas2.drawBitmap(mask, 0, 0, paint2);
|
||
paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||
canvas2.drawBitmap(result, 0, 0, paint2);
|
||
return result2;
|
||
|
||
|
||
// Canvas mCanvas = new Canvas();
|
||
// mCanvas.setBitmap(bgBitmap);
|
||
// Paint mPaint = new Paint();
|
||
// RectF mRectM = new RectF(scaleM, scaleM, mBitmap.getWidth() - scaleM, mBitmap.getHeight() - scaleM); //设置剪裁圆角的区域
|
||
// Rect mRect = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight());
|
||
// RectF mRectF = mRectM;
|
||
//
|
||
// float roundPx = 15; //圆角半径
|
||
// mPaint.setAntiAlias(true);
|
||
// //Log.d("wy"+TAG,"mBitmap.getWidth()="+mBitmap.getWidth()+", mBitmap.getHeight()="+mBitmap.getHeight());
|
||
// mCanvas.drawRoundRect(mRectF, roundPx, roundPx, mPaint);
|
||
// mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
||
// mCanvas.drawBitmap(mBitmap, mRect, mRect, mPaint);
|
||
// return bgBitmap;
|
||
}
|
||
|
||
|
||
} |