pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息
+ if (pinfo != null) {
+ for (int i = 0; i < pinfo.size(); i++) {
+ String pn = pinfo.get(i).packageName;
+ if (pn.equals("com.tencent.mm")) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * 打电话
+ *
+ * Intent.ACTION_DIAL Intent.ACTION_CALL
+ *
+ * @param context
+ * @param mobile
+ */
+ public static void callUp(Context context, String mobile) {
+ Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"
+ + mobile));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ }
+
+ /**
+ * 获取设备ID
+ *
+ * @param context
+ * @return
+ */
+ public static String getDevId(Context context) {
+ TelephonyManager TelephonyMgr = (TelephonyManager) context
+ .getSystemService(Context.TELEPHONY_SERVICE);
+ return TelephonyMgr.getDeviceId();
+ }
+
+ /**
+ * 姓名脱敏
+ *
+ * @param fullName
+ * @return
+ */
+ public static String desensitizedName(String fullName) {
+ if (fullName == null || fullName.length() <= 1) {
+ return fullName;
+ }
+ char[] nameArr = fullName.toCharArray();
+ if (nameArr.length > 2) {
+ for (int i = 1; i < nameArr.length - 1; i++) {
+ nameArr[i] = '*';
+ }
+ } else {
+ nameArr[1] = '*';
+ }
+
+ return new String(nameArr);
+ }
+
+
+ public static String formatDateGetFull(String date) {
+ if (isEmpty(date)) {
+ return "";
+ }
+ Date d = new Date(Long.parseLong(date));
+ SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ return dateFormat1.format(d);
+ }
+
+ public static String formatDateGetCurrentTime() {
+ Date d = new Date(System.currentTimeMillis());
+ SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//.SSS
+ return dateFormat1.format(d);
+ }
+
+
+ public static String formatDateGetFull(long date) {
+ if (date == 0) {
+ return "";
+ }
+ Date d = new Date(date);
+ SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+ return dateFormat1.format(d);
+ }
+
+ public static String formatDateGetDay(long date) {
+ if (date == 0) {
+ return "";
+ }
+ Date d = new Date(date);
+ SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
+ return dateFormat1.format(d);
+ }
+
+ public static boolean isEmpty(String s) {
+ if (TextUtils.isEmpty(s) || s.trim().equals("null")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
+ /**
+ * 格式化浮点型
+ *
+ * @param data
+ * @return
+ */
+ public static String formatDouble(double data) {
+ return new DecimalFormat("0.00").format(data);
+ }
+
+
+ /**
+ * 格式化分钟
+ *
+ * @param minutes
+ * @return
+ */
+ public static String formatMinutes(int minutes) {
+ int hour = minutes / 60;
+ int minute = minutes % 60;
+ if (hour > 0 && minute > 0) {
+ return hour + "小时" + minute + "分钟";
+ } else if (hour > 0) {
+ return hour + "小时";
+ } else {
+ return minute + "分钟";
+ }
+ }
+
+
+ //com.fawan.news
+ public static void goToMarket(Context context, String packageName) {
+ Uri uri = Uri.parse("market://details?id=" + packageName);
+ Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
+ try {
+ context.startActivity(goToMarket);
+ } catch (ActivityNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * true为存在,false为不存在
+ *
+ * @param context
+ * @param packageName
+ * @return
+ */
+ public static boolean isInstallApp(Context context, String packageName) {
+ try {
+ context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
+ return true;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+
+ /**
+ * 格式化float 保留两位小数
+ *
+ * @param data
+ * @return
+ */
+ public static float formatFloat2(float data) {
+// DecimalFormat decimalFormat = new DecimalFormat("0.00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
+// return decimalFormat.format(data);//返回字符串
+
+ int scale = 1;//设置位数
+ int roundingMode = 4;//表示四舍五入,可以选择其他舍值方式,例如去尾,等等.
+ BigDecimal bd = new BigDecimal((double) data);
+ bd = bd.setScale(scale, roundingMode);
+ data = bd.floatValue();
+ return data;
+ }
+
+ /**
+ * Android 6.0 之前(不包括6.0)获取mac地址
+ * 必须的权限
+ *
+ * @param context * @return
+ */
+ public static String getMacDefault(Context context) {
+ String mac = "";
+ if (context == null) {
+ return mac;
+ }
+ WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ WifiInfo info = null;
+ try {
+ info = wifi.getConnectionInfo();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (info == null) {
+ return null;
+ }
+ mac = info.getMacAddress();
+ if (!TextUtils.isEmpty(mac)) {
+ mac = mac.toUpperCase(Locale.ENGLISH);
+ }
+ return mac;
+ }
+
+ /**
+ * Android 6.0-Android 7.0 获取mac地址
+ */
+ public static String getMacAddress() {
+ String macSerial = null;
+ String str = "";
+
+ try {
+ Process pp = Runtime.getRuntime().exec("cat/sys/class/net/wlan0/address");
+ InputStreamReader ir = new InputStreamReader(pp.getInputStream());
+ LineNumberReader input = new LineNumberReader(ir);
+
+ while (null != str) {
+ str = input.readLine();
+ if (str != null) {
+ macSerial = str.trim();//去空格
+ break;
+ }
+ }
+ } catch (IOException ex) {
+ // 赋予默认值
+ ex.printStackTrace();
+ }
+
+ return macSerial;
+ }
+
+ /**
+ * Android 7.0之后获取Mac地址
+ * 遍历循环所有的网络接口,找到接口是 wlan0
+ * 必须的权限
+ *
+ * @return
+ */
+ public static String getMacFromHardware() {
+ try {
+ ArrayList all = Collections.list(NetworkInterface.getNetworkInterfaces());
+ for (NetworkInterface nif : all) {
+ if (!nif.getName().equals("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 (!TextUtils.isEmpty(res1)) {
+ res1.deleteCharAt(res1.length() - 1);
+ }
+ return res1.toString();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return "";
+ }
+
+ /**
+ * 获取mac地址(适配所有Android版本)
+ *
+ * @return
+ */
+ public static String getMac(Context context) {
+ String mac = "";
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+ mac = getMacDefault(context);
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
+ mac = getMacAddress();
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ mac = getMacFromHardware();
+ }
+ return mac;
+ }
+
+ //把String转化为float
+ public static double convertToFloat(String number, double defaultValue) {
+ if (TextUtils.isEmpty(number)) {
+ return defaultValue;
+ }
+ try {
+ return Double.parseDouble(number);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+
+ }
+
+ /**
+ * 获取AndroidId
+ *
+ * @param context
+ * @return
+ */
+ public static String getAndroidId(Context context) {
+ String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
+ return androidId;
+ }
+
+ /**
+ * 获取设备唯一 UDID
+ *
+ * @param context
+ * @return
+ */
+ @SuppressLint("MissingPermission")
+ public static String getUDID(Context context) {
+// String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
+// L.e("androidID===" + androidID);
+// return androidID;
+ String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
+ if (!androidID.equals("")) {
+ try {
+ if (!"9774d56d682e549c".equals(androidID)) {
+ androidID = UUID.nameUUIDFromBytes(androidID.getBytes("utf8")).toString();
+ } else {
+ @SuppressLint("MissingPermission") final String deviceId = ((TelephonyManager) context.getSystemService(TELEPHONY_SERVICE)).getDeviceId();
+ androidID = deviceId != null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")).toString() : UUID.randomUUID().toString();
+ }
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException(e);
+ }
+ return androidID;
+ }
+
+ //需要权限 android.permission.READ_PHONE_STATE
+ TelephonyManager TelephonyMgr = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
+ String szImei = TelephonyMgr.getDeviceId();
+ if (!szImei.equals("")) {
+ return szImei;
+ }
+
+ //需要权限 android.permission.ACCESS_WIFI_STATE
+ WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
+ if (!m_szWLANMAC.equals("")) {
+ return m_szWLANMAC;
+ }
+
+ //需要权限 android.permission.BLUETOOTH
+ BluetoothAdapter m_BluetoothAdapter = null;
+ m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ String m_szBTMAC = m_BluetoothAdapter.getAddress();
+ if (!m_szBTMAC.equals("")) {
+ return m_szBTMAC;
+ }
+ return getUniquePsuedoID();
+ }
+
+ //获得 Psuedo ID
+ public static String getUniquePsuedoID() {
+ String serial = null;
+ String m_szDevIDShort = "35" +
+ 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; //13 位
+ try {
+ serial = Build.class.getField("SERIAL").get(null).toString();
+ //API>=9 使用serial号
+ return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
+ } catch (Exception exception) {
+ //serial需要一个初始化,随意值
+ serial = "serial";
+ }
+
+ //使用硬件信息拼凑出来的15位号码
+ return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
+ }
+
+ public static String getCPUSerial() {
+ String line = "";
+ String TAG = "aaa";
+ Log.e(TAG, " get_quck_Sn() ");
+ Class> c = null;
+ try {
+ c = Class.forName("android.os.SystemProperties");
+
+ Method get = c.getMethod("get", String.class);
+ line = (String) get.invoke(c, "ro.serialno");
+ } catch (ClassNotFoundException | NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Log.e(TAG, " get_quck_Sn() " + line);
+ System.out.println("设备串号" + line);
+ return line;
+ }
+
+ /**
+ * 判断网络连接状态
+ *
+ * @param context
+ * @return
+ */
+ 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;
+ }
+
+ /**
+ * 判断WiFi连接状态
+ *
+ * @param context
+ * @return
+ */
+ public static boolean isWifiConnected(Context context) {
+ if (context != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo mWiFiNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
+ if (mWiFiNetworkInfo != null) {
+ return mWiFiNetworkInfo.isAvailable();
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 判断移动网络状态
+ *
+ * @param context
+ * @return
+ */
+ public static boolean isMobileConnected(Context context) {
+ if (context != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo mMobileNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
+ if (mMobileNetworkInfo != null) {
+ return mMobileNetworkInfo.isAvailable();
+ }
+ }
+ return false;
+ }
+
+ /**
+ * 获取网络连接类型
+ *
+ * @param context
+ * @return
+ */
+ public static int getConnectedType(Context context) {
+ if (context != null) {
+ ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
+ if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
+ return mNetworkInfo.getType();
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * 根据字符的起始和结束索引提取子串
+ *
+ * @param input 原始字符串
+ * @param startIndex 起始索引(包含,从0开始)
+ * @param endIndex 结束索引(不包含)
+ * @return 子串,若输入无效或索引越界则返回空字符串
+ */
+ public static String getSubstringByIndices(String input, int startIndex, int endIndex) {
+ if (input == null) {
+ return "";
+ }
+ // 处理索引越界问题
+ int safeStart = Math.max(startIndex, 0);
+ int safeEnd = Math.min(endIndex, input.length());
+ if (safeStart > safeEnd) {
+ return "";
+ }
+ return input.substring(safeStart, safeEnd);
+ }
+
+ public static String getSubstringByIndex(String input, int startIndex, int length) {
+ if (input == null) {
+ return "";
+ }
+ // 处理索引越界问题
+ int safeStart = Math.max(startIndex, 0);
+ int safeEnd = Math.min(startIndex + length, input.length());
+ if (safeStart > safeEnd) {
+ return "";
+ }
+ return input.substring(safeStart, safeEnd);
+ }
+
+ /**
+ * 十进制转十六进制
+ *
+ * @param decimal
+ * @return
+ */
+ public static String decimalToHexWithPadding(int decimal, int padding) {
+ // 将十进制转换为十六进制,并转换为字符串
+ String hex = Integer.toHexString(decimal);
+
+ // 确保字符串长度为至少4位,不足部分前面补0
+ while (hex.length() < padding) {
+ hex = "0" + hex;
+ }
+
+ return hex.toUpperCase(); // 返回大写形式的十六进制字符串
+ }
+
+ /**
+ * 十进制转二进制,且返回的二进制为至少7位数
+ *
+ * @param decimal
+ * @return
+ */
+ public static String decimalToBinary(int decimal) {
+ // 如果输入为0,直接返回"0"
+ if (decimal == 0) {
+ return "0";
+ }
+
+ StringBuilder binary = new StringBuilder();
+
+ // 除2取余法,将余数加入二进制字符串
+ while (decimal > 0) {
+ int remainder = decimal % 2;
+ binary.insert(0, remainder);
+ decimal = decimal / 2;
+ }
+ int length = binary.length();
+ if (length < 7) {
+ int padding = 7 - length;
+ for (int i = 0; i < padding; i++) {
+ binary.insert(0, '0');
+ }
+ }
+ return binary.toString();
+ }
+
+ /**
+ * 将二进制字符串转换为十六进制字符串,每8位转换为两位十六进制,不足两位前面补零
+ *
+ * @param binaryStr 输入的二进制字符串(仅包含0和1)
+ * @return 转换后的十六进制字符串
+ * @throws IllegalArgumentException 如果输入不是有效的二进制字符串
+ */
+ public static String binaryToHex(String binaryStr) {
+ // 校验输入合法性
+ if (binaryStr == null || !binaryStr.matches("[01]+")) {
+ throw new IllegalArgumentException("Invalid binary string");
+ }
+
+ // 补前导零使长度成为8的倍数
+ int length = binaryStr.length();
+ int padding = (8 - (length % 8)) % 8; // 计算需要补零的数量
+ StringBuilder paddedBinary = new StringBuilder();
+ for (int i = 0; i < padding; i++) {
+ paddedBinary.append('0');
+ }
+ paddedBinary.append(binaryStr);
+
+ // 每8位转换为两位十六进制
+ StringBuilder hexStr = new StringBuilder();
+ for (int i = 0; i < paddedBinary.length(); i += 8) {
+ String byteStr = paddedBinary.substring(i, i + 8);
+ int decimalValue = Integer.parseInt(byteStr, 2);
+ hexStr.append(String.format("%02X", decimalValue & 0xFF));
+ }
+
+ return hexStr.toString();
+ }
+
+ /**
+ * 数据校验 异或处理
+ */
+ public static String getXor(String content) {
+ int a = 0;
+ for (int i = 0; i < content.length() / 2; i++) {
+ a = a ^ Integer.parseInt(content.substring(i * 2, (i * 2) + 2), 16);
+ }
+ String result = Integer.toHexString(a).toUpperCase();
+ if (result.length() == 1) {
+ return "0" + result;
+ } else {
+ return result;
+ }
+ }
+
+ public static double formatPersonInfo(String input, int startIndex, int length) {
+ if (input == null) {
+ return 0;
+ }
+ // 处理索引越界问题
+ int safeStart = Math.max(startIndex, 0);
+ int safeEnd = Math.min(startIndex + length, input.length());
+ if (safeStart > safeEnd) {
+ return 0;
+ }
+ String result = input.substring(safeStart, safeEnd);
+ double num = Integer.parseInt(result, 16);
+ return num;
+ }
+
+ /**
+ * 安装apk
+ *
+ * @param activity
+ * @param apkFile
+ */
+ public static void installApk(Context activity, File apkFile) {
+ //文件有所有者概念,现在是属于当前进程的,需要把这个文件暴露给系统安装程序(其他进程)去安装
+ //因此,可能会存在权限问题,需要做下面的设置
+ //如果文件是sdcard上的,就不需要这个操作了
+ try {
+ apkFile.setExecutable(true, false);
+ apkFile.setReadable(true, false);
+ apkFile.setWritable(true, false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ Intent intent = new Intent();
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.setAction(Intent.ACTION_VIEW);
+ Uri uri;
+
+ //TODO N FileProvider
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ uri = FileProvider.getUriForFile(activity, activity.getPackageName() + ".fileProvider", apkFile);
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+// intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ } else {
+ uri = Uri.fromFile(apkFile);
+ }
+
+ intent.setDataAndType(uri, "application/vnd.android.package-archive");
+ activity.startActivity(intent);
+
+ //TODO 0 INSTALL PERMISSION
+ //在AndroidManifest中加入权限即可
+ }
+
+}
diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/utils/QRCodeUtil.kt b/app/src/main/java/com/shuwei/intelligent/shelves/utils/QRCodeUtil.kt
new file mode 100644
index 0000000..b05a2ca
--- /dev/null
+++ b/app/src/main/java/com/shuwei/intelligent/shelves/utils/QRCodeUtil.kt
@@ -0,0 +1,101 @@
+package com.shuwei.intelligent.shelves.utils
+
+import android.graphics.Bitmap
+import android.graphics.Canvas
+import android.graphics.Color
+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
+
+
+/**
+ * 二维码生成工具类
+ */
+object QRCodeUtil {
+
+ /**
+ * 生成二维码(默认大小)
+ * @param content 二维码内容
+ * @return 生成的二维码Bitmap
+ */
+ @JvmOverloads
+ fun generateQRCode(content: String, size: Int = 500): Bitmap? {
+ return generateQRCode(content, size, Color.BLACK, Color.WHITE)
+ }
+
+ /**
+ * 生成二维码(自定义颜色)
+ * @param content 二维码内容
+ * @param size 二维码边长(像素)
+ * @param colorCode 二维码颜色
+ * @param backgroundColor 背景颜色
+ * @return 生成的二维码Bitmap
+ */
+ fun generateQRCode(
+ content: String,
+ size: Int,
+ colorCode: Int,
+ backgroundColor: Int
+ ): Bitmap? {
+ if (content.isEmpty()) {
+ return null
+ }
+
+ return try {
+ val hints = mutableMapOf().apply {
+ put(EncodeHintType.CHARACTER_SET, "UTF-8")
+ put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H) // 纠错级别
+ put(EncodeHintType.MARGIN, 1) // 边距
+ }
+
+ val bitMatrix = QRCodeWriter().encode(
+ content,
+ BarcodeFormat.QR_CODE,
+ size,
+ size,
+ hints
+ )
+
+ val pixels = IntArray(size * size).apply {
+ for (y in 0 until size) {
+ for (x in 0 until size) {
+ this[y * size + x] = if (bitMatrix.get(x, y)) colorCode else backgroundColor
+ }
+ }
+ }
+
+ Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888).apply {
+ setPixels(pixels, 0, size, 0, 0, size, size)
+ }
+
+ } catch (e: WriterException) {
+ e.printStackTrace()
+ null
+ }
+ }
+
+ /**
+ * 生成带Logo的二维码
+ * @param content 二维码内容
+ * @param size 二维码边长(像素)
+ * @param logo Logo Bitmap
+ * @return 带Logo的二维码Bitmap
+ */
+ fun generateQRCodeWithLogo(content: String, size: Int, logo: Bitmap?): Bitmap? {
+ val qrCode = generateQRCode(content, size) ?: return null
+ logo ?: return qrCode
+
+ val logoSize = size / 5 // Logo大小约为二维码的1/5
+ val scaledLogo = Bitmap.createScaledBitmap(logo, logoSize, logoSize, false)
+
+ val offset = (size - logoSize) / 2
+ return Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888).apply {
+ val canvas = Canvas(this)
+ canvas.drawBitmap(qrCode, 0f, 0f, null)
+ canvas.drawBitmap(scaledLogo, offset.toFloat(), offset.toFloat(), null)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/utils/SpTool.kt b/app/src/main/java/com/shuwei/intelligent/shelves/utils/SpTool.kt
new file mode 100644
index 0000000..dbb0bc4
--- /dev/null
+++ b/app/src/main/java/com/shuwei/intelligent/shelves/utils/SpTool.kt
@@ -0,0 +1,31 @@
+package com.shuwei.intelligent.shelves.utils
+
+import com.shuwei.intelligent.shelves.App
+import com.shuwei.intelligent.shelves.utils.ext.put
+import kotlin.to
+
+object SpTool {
+
+ const val DEVICE_CONFIG_CACHE = "deviceConfigCache"
+ const val TOKEN = "token"
+ const val LAUNCH_PAGE_TYPE = "launchPageType"
+ const val DEVICE_ID = "deviceId"
+
+ val pref = App.getSharedPref()!!
+
+ fun put(key: String, value: Any) {
+ pref.put(key to value)
+ }
+
+ fun getInt(key: String, defValue: Int = 0): Int {
+ return pref.getInt(key, defValue)
+ }
+
+ fun getString(key: String, defValue: String? = ""): String {
+ return pref.getString(key, defValue) ?: ""
+ }
+
+ fun getBoolean(key: String, defValue: Boolean = false): Boolean {
+ return pref.getBoolean(key, defValue)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_init_button.xml b/app/src/main/res/drawable/bg_init_button.xml
new file mode 100644
index 0000000..71ff7c1
--- /dev/null
+++ b/app/src/main/res/drawable/bg_init_button.xml
@@ -0,0 +1,11 @@
+
+
+ -
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/img_init.png b/app/src/main/res/drawable/img_init.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8d08441013d513b7923602689182c6de67a19f9
GIT binary patch
literal 1023089
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