左晓为主开发手持机充值管理机
zuoxiao
2024-04-02 732e4481b8437719468cddfb4971ee54a4b36625
app/src/main/java/com/dayu/recharge/activity/HomeActivity.java
@@ -1,17 +1,24 @@
package com.dayu.recharge.activity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;
import com.dayu.recharge.MyApplication;
import com.dayu.recharge.R;
import com.dayu.recharge.databinding.ActivityHomeBinding;
import com.dayu.recharge.dbBean.AdminDataBean;
import com.dayu.recharge.utils.TipUtil;
import com.permissionx.guolindev.PermissionX;
import com.dayu.recharge.view.PassWordDialog;
import java.lang.reflect.Method;
import java.util.Random;
import java.util.zip.CRC32;
/**
@@ -32,25 +39,9 @@
        homeBinding = ActivityHomeBinding.inflate(LayoutInflater.from(this));
        setContentView(homeBinding.getRoot());
        initView();
        getPermission();
        rushState();
    }
    private void getPermission() {
        PermissionX.init(HomeActivity.this).permissions(Manifest.permission.READ_PHONE_STATE)
                .onExplainRequestReason((scope, deniedList) -> {
// val message = "PermissionX需要您同意以下权限才能正常使用"
                })
                .request((allGranted, grantedList, deniedList) -> {
                    if (allGranted) {//所有申请的权限都已通过
                    } else {//您拒绝了如下权限:$deniedList
                    }
                });
    }
    public void rushState() {
        if (MyApplication.myApplication.isConncet) {
@@ -64,49 +55,48 @@
    }
    private void initView() {
        homeBinding.homeNewCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AdminDataBean adminData = baseDao.adminDao().findFirst();
                if (adminData != null) {
                    startActivity(new Intent(HomeActivity.this, NewCardActivity.class));
                } else {
                    TipUtil.show("请先设置管理员信息");
                }
        AdminDataBean adminData = baseDao.adminDao().findFirst();
        if (adminData == null) {
            // 创建一个随机数生成器对象
            Random random = new Random();
            // 生成 1 到 12 之间的随机数字
            int randomNumber = random.nextInt(12) + 1;
            AdminDataBean adminDataBean = new AdminDataBean();
            adminDataBean.setSerial(randomNumber + generateUniqueNumber(getSN()));
            baseDao.adminDao().insert(adminDataBean);
        }
            }
        });
        homeBinding.homeRecharge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AdminDataBean adminData = baseDao.adminDao().findFirst();
                if (adminData != null) {
                    startActivity(new Intent(HomeActivity.this, RechargeActivity.class));
                } else {
                    TipUtil.show("请先设置管理员信息");
                }
        homeBinding.homeNewCard.setOnClickListener(v -> {
            AdminDataBean adminData1 = baseDao.adminDao().findFirst();
            if (adminData1.isHasAddressCode()) {
                startActivity(new Intent(HomeActivity.this, NewCardActivity.class));
            } else {
                TipUtil.show("请先设置地址信息");
            }
        });
        homeBinding.homeRedCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(HomeActivity.this, ReadCardAcitivy.class));
        homeBinding.homeRecharge.setOnClickListener(v -> {
            AdminDataBean adminData12 = baseDao.adminDao().findFirst();
            if (adminData12.isHasAddressCode()) {
                startActivity(new Intent(HomeActivity.this, RechargeActivity.class));
            } else {
                TipUtil.show("请先设置地址信息");
            }
        });
        homeBinding.homeRedCard.setOnClickListener(v -> startActivity(new Intent(HomeActivity.this, ReadCardAcitivy.class)));
        homeBinding.homeAdmin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(HomeActivity.this, SysActivity.class));
                PassWordDialog passWordDialog = new PassWordDialog(HomeActivity.this, new Intent(HomeActivity.this, SysActivity.class));
                passWordDialog.show();
            }
        });
        //参数设置
        homeBinding.homeParameter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(HomeActivity.this, ParameterActivity.class));
            }
        homeBinding.homeParameter.setOnClickListener(v -> {
            PassWordDialog passWordDialog = new PassWordDialog(HomeActivity.this, new Intent(HomeActivity.this, ParameterActivity.class));
            passWordDialog.show();
        });
        homeBinding.homeMy.setOnClickListener(new View.OnClickListener() {
            @Override
@@ -116,4 +106,77 @@
            }
        });
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        homeActivity = null;
    }
    long mExitTime;
    //点击两次退出程序 有时间间隔 间隔内点击则退出程序 否则 则提示
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if ((System.currentTimeMillis() - mExitTime) > 2000) {
                Toast.makeText(HomeActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                mExitTime = System.currentTimeMillis();
            } else {
                HomeActivity.this.finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    public String generateUniqueNumber(String input) {
        try {
            // 使用CRC32哈希函数
            CRC32 crc32 = new CRC32();
            crc32.update(input.getBytes());
            long crcValue = crc32.getValue();
            // 将哈希值映射到6位数字的范围
            long sixDigitNumber = Math.abs(crcValue) % 1000000;
            // 格式化为6位数字的字符串
            return String.format("%06d", sixDigitNumber);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    @SuppressLint("MissingPermission")
    public static String getSN() {
        String serial = null;
        try {
            Class<?> c = Class.forName("android.os.SystemProperties");
            Method get = c.getMethod("get", String.class);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                try {
                    serial = (String) get.invoke(c, "ro.sunmi.serial");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return serial;
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                serial = Build.getSerial();
                return serial;
            } else {
                //安卓8以下使用Build.SERIAL相同方式
                //return Build.SERIAL;
                try {
                    serial = (String) get.invoke(c, "ro.serialno");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return serial;
            }
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }
}