左晓为主开发手持机充值管理机
修改权限逻辑,获取权限后再生成数据库
数据库保存在sd防止用户删除后没有数据了
9个文件已修改
268 ■■■■ 已修改文件
app/src/main/java/com/dayu/recharge/MyApplication.java 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/AdminSetupActivity.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/BaseNfcActivity.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/HomeActivity.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/LoginActivity.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/activity/SysIpActivity.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/dao/BaseDaoSingleton.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/net/SocketNet.java 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/utils/DeviceNumberUtils.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -1,6 +1,7 @@
package com.dayu.recharge;
import android.app.Application;
import android.nfc.Tag;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
@@ -9,6 +10,7 @@
import com.dayu.recharge.dao.BaseDaoSingleton;
import com.dayu.recharge.dbBean.DeviceNumber;
import com.dayu.recharge.dbBean.IpBean;
import com.dayu.recharge.utils.DeviceNumberUtils;
import com.dayu.recharge.utils.ToastUtil;
import com.easysocket.EasySocket;
import com.easysocket.config.EasySocketOptions;
@@ -34,7 +36,7 @@
import java.util.TimerTask;
public class MyApplication extends Application {
    public static String TAG = "MyApplication";
    public static MyApplication myApplication;
    private String address;
@@ -52,7 +54,8 @@
        myApplication = this;
        isAidl = true;
        AidlUtil.getInstance().connectPrinterService(this);
        initEasySocket(false, null);
//        initEasySocket(false, null);
        CrashReport.initCrashReport(getApplicationContext(), "45551598b8", true);
    }
@@ -144,86 +147,79 @@
        if (!TextUtils.isEmpty(ip)
                && !TextUtils.isEmpty(String.valueOf(port))
                && !TextUtils.isEmpty(addressCode)) {
            if (EasySocket.getInstance().getDefconnection() != null) {
                isDoInitMachine = true;
                InitMachineRequestBean initMachineRequestBean = new InitMachineRequestBean();
                initMachineRequestBean.setControl("01");
                //130107200008    112    青泉居委会
                initMachineRequestBean.setAddress(addressCode);
                initMachineRequestBean.setXuLie(SocketUtil.getXuLie(this));
                initMachineRequestBean.setAFN("91");
//
                Log.i("Socket", "注册报文");
                SocketNet.getInstance().sendTestMessage(initMachineRequestBean.pack(), new SocketCallBack() {
                    @Override
                    public void onSocketResponse(SocketData readData) {
                        if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                            //校验CRC成功
                            InitMachineBackBean initMachineBackBean = new InitMachineBackBean();
            Log.i("initMachineRequestBean", "开始注册设备");
                if (EasySocket.getInstance().getDefconnection() != null) {
                    isDoInitMachine = true;
                    InitMachineRequestBean initMachineRequestBean = new InitMachineRequestBean();
                    initMachineRequestBean.setControl("01");
                    //130107200008    112    青泉居委会
                    initMachineRequestBean.setAddress(addressCode);
                    initMachineRequestBean.setXuLie(SocketUtil.getXuLie(this));
                    initMachineRequestBean.setAFN("91");
                    SocketNet.getInstance().sendTestMessage(initMachineRequestBean.pack(), new SocketCallBack() {
                        @Override
                        public void onSocketResponse(SocketData readData) {
                            String initCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 2, 18));
                            //确认收到注册号报文
                            ConfirmMachineRequestBean confirmMachineRequestBean = new ConfirmMachineRequestBean();
                            confirmMachineRequestBean.setControl("01");
                            //130107200008    112    青泉居委会
                            confirmMachineRequestBean.setAddress(addressCode);
                            confirmMachineRequestBean.setXuLie(SocketUtil.getXuLie(MyApplication.this));
                            confirmMachineRequestBean.setAFN("92");
                            confirmMachineRequestBean.setInitCode(initCode);
                            Log.i("Socket", "确认注册报文");
                            SocketNet.getInstance().sendTestMessage(confirmMachineRequestBean.pack(), new SocketCallBack() {
                            if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                                //校验CRC成功
                                InitMachineBackBean initMachineBackBean = new InitMachineBackBean();
                                String initCode = HexUtil.bytesToHex(Arrays.copyOfRange(readData.getBodyBytes(), 2, 18));
                                //确认收到注册号报文
                                ConfirmMachineRequestBean confirmMachineRequestBean = new ConfirmMachineRequestBean();
                                confirmMachineRequestBean.setControl("01");
                                //130107200008    112    青泉居委会
                                confirmMachineRequestBean.setAddress(addressCode);
                                confirmMachineRequestBean.setXuLie(SocketUtil.getXuLie(MyApplication.this));
                                confirmMachineRequestBean.setAFN("92");
                                confirmMachineRequestBean.setInitCode(initCode);
                                Log.i("Socket", "确认注册报文");
                                SocketNet.getInstance().sendTestMessage(confirmMachineRequestBean.pack(), new SocketCallBack() {
                                @Override
                                public void onSocketResponse(SocketData readData) {
                                    isDoInitMachine = false;
                                    if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                                        byte stateByte = readData.getBodyBytes()[2];
                                        String state = BcdUtil.bcdToStr(stateByte);
                                        //BCD码00成功01失败(注册号不是服务器返回信息)
                                        if (state.equalsIgnoreCase("00")) {
                                            //保存设备注册号
                                            DeviceNumber deviceNumber = BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().findFirst();
                                            if (deviceNumber != null) {
                                                deviceNumber.setDeviceRegistrationNumber(initCode);
                                            } else {
                                                deviceNumber = new DeviceNumber();
                                                deviceNumber.setDeviceRegistrationNumber(initCode);
                                            }
                                            BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().insert(deviceNumber);
                                    @Override
                                    public void onSocketResponse(SocketData readData) {
                                        isDoInitMachine = false;
                                        if (CRC8.isCRC8(readData.getOriginDataBytes())) {
                                            byte stateByte = readData.getBodyBytes()[2];
                                            String state = BcdUtil.bcdToStr(stateByte);
                                            //BCD码00成功01失败(注册号不是服务器返回信息)
                                            if (state.equalsIgnoreCase("00")) {
                                                //保存设备注册号
                                                if (!TextUtils.isEmpty(initCode)){
                                                    DeviceNumberUtils.setDeviceNumber(initCode);
                                                }
                                                Log.i(TAG, "onSuccess: 设备注册号:" + initCode);
//                                            WSHelper.getInstance(MyApplication.this).put("initCode", initCode);
                                            ToastUtil.show("充值管理注册报文获取成功");
                                                ToastUtil.show("充值管理注册报文获取成功");
                                            } else {
                                                //校验CRC错误
                                                ToastUtil.show("确认收到注册报文状态失败");
                                            }
                                        } else {
                                            //校验CRC错误
                                            ToastUtil.show("确认收到注册报文状态失败");
                                            ToastUtil.show("确认收到注册报文校验CRC错误");
                                        }
                                    } else {
                                        //校验CRC错误
                                        ToastUtil.show("确认收到注册报文校验CRC错误");
                                    }
                                }
                                @Override
                                public void onSocketError(int code, String msg) {
                                    @Override
                                    public void onSocketError(int code, String msg) {
                                }
                            });
                        } else {//校验CRC错误
                            ToastUtil.show("充值管理注册报文校验CRC错误");
                                    }
                                });
                            } else {//校验CRC错误
                                ToastUtil.show("充值管理注册报文校验CRC错误");
                            }
                        }
                    }
                    @Override
                    public void onSocketError(int code, String msg) {
                        @Override
                        public void onSocketError(int code, String msg) {
                    }
                });
                        }
                    });
                }
            }
        }
    }
    private void createSocket(String ip, int port) {
app/src/main/java/com/dayu/recharge/activity/AdminSetupActivity.java
@@ -61,20 +61,17 @@
                        adminBinding.adminAddressCode.setText(adminData.getAddressCode());
                        adminData.setSerial(adminBinding.adminSerial.getText().toString());
                        baseDao.adminDao().insert(adminData);
                        MyApplication.myApplication.initEasySocket(false, null);
                        setData();
                        IpBean ipBean = MyApplication.myApplication.ipBean;
                        if (ipBean != null) {
                            MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode());
                        }
                        TipUtil.show(AdminSetupActivity.this, "设置成功", new TipUtil.TipListener() {
                            @Override
                            public void onCancle() {
                                AdminSetupActivity.this.finish();
                            }
                        });
                        setData();
                        IpBean ipBean = baseDao.ipDao().findFirst();
                        if (ipBean != null) {
                            MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode());
                        }
                    } else {
                        TipUtil.show(AdminSetupActivity.this, "输入的数字不能超过16777215");
                    }
app/src/main/java/com/dayu/recharge/activity/BaseNfcActivity.java
@@ -112,12 +112,12 @@
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mNfcAdapter != null)
            mNfcAdapter.disableReaderMode(this);
    }
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        if (mNfcAdapter != null)
//            mNfcAdapter.disableReaderMode(this);
//    }
    /**
     * 检测工作,判断设备的NFC支持情况
app/src/main/java/com/dayu/recharge/activity/HomeActivity.java
@@ -35,25 +35,10 @@
        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) {
app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
@@ -1,14 +1,22 @@
package com.dayu.recharge.activity;
import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.dayu.recharge.MyApplication;
import com.dayu.recharge.dao.BaseDaoSingleton;
import com.dayu.recharge.databinding.ActivityLoginBinding;
import com.dayu.recharge.dbBean.PassWordBean;
import com.dayu.recharge.utils.WSMD5;
import com.permissionx.guolindev.PermissionX;
import java.io.File;
/**
@@ -17,7 +25,7 @@
 * Date: 2023-11-10 19:52
 * Description: 登录界面
 */
public class LoginActivity extends BaseActivity {
public class LoginActivity extends AppCompatActivity {
    ActivityLoginBinding binding;
    PassWordBean passWordBean;
@@ -27,11 +35,7 @@
        super.onCreate(savedInstanceState);
        binding = ActivityLoginBinding.inflate(LayoutInflater.from(this));
        setContentView(binding.getRoot());
        try {
            passWordBean = baseDao.loginPsDao().findFirst();
        } catch (Exception e) {
            e.printStackTrace();
        }
        getPermission();
        initView();
    }
@@ -48,4 +52,29 @@
            }
        });
    }
    private void getPermission() {
        PermissionX.init(LoginActivity.this).permissions(Manifest.permission.READ_PHONE_STATE,
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .onExplainRequestReason((scope, deniedList) -> {
                })
                .request((allGranted, grantedList, deniedList) -> {
                    if (allGranted) {//所有申请的权限都已通过
                        MyApplication.myApplication.initEasySocket(false, null);
                        try {
                            File file = new File(BaseDaoSingleton.SqlitePath);
                            if (!file.exists()) {
                                file.mkdirs();
                            }
                            passWordBean = BaseDaoSingleton.getInstance(this).loginPsDao().findFirst();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {//您拒绝了如下权限:$deniedList
                    }
                });
    }
}
app/src/main/java/com/dayu/recharge/activity/SysIpActivity.java
@@ -52,7 +52,7 @@
                    String oldIp = ipBean.getIp();
                    int oldPort = ipBean.getPort();
                    if (!oldIp.equals(ipBinding.ip.getText().toString())|| oldPort != Integer.valueOf(ipBinding.port.getText().toString())) {
                        DeviceNumberUtils.setDeviceNumber("");
//                        DeviceNumberUtils.setDeviceNumber("");
                    }
                }
                if (ipBean == null) {
@@ -64,9 +64,9 @@
                AdminDataBean adminData = baseDao.adminDao().findFirst();
                //修改IP后重新连接
                MyApplication.myApplication.initEasySocket(false, null);
                if (adminData != null) {
                    MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode());
                }
//                if (adminData != null) {
//                    MyApplication.myApplication.initMachineRequestBean(ipBean.getIp(), ipBean.getPort(), adminData.getAddressCode());
//                }
                Toast.makeText(SysIpActivity.this, "保存成功", Toast.LENGTH_LONG).show();
            }
        });
app/src/main/java/com/dayu/recharge/dao/BaseDaoSingleton.java
@@ -1,11 +1,14 @@
package com.dayu.recharge.dao;
import android.content.Context;
import android.os.Environment;
import android.os.FileUtils;
import androidx.room.Room;
import com.dayu.recharge.utils.MyFileUtil;
import java.io.File;
/**
 * Copyright (C), 2023,
@@ -16,19 +19,21 @@
public class BaseDaoSingleton {
    public static AppDatabase baseDao;
    public static AppDatabase AsynchBaseDao;
//MyFileUtil.SqlitePath +
    public static String SqlitePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dayu" + File.separator + "data" + File.separator;
    //MyFileUtil.SqlitePath +
    public static AppDatabase getInstance(Context context) {
        if (baseDao == null) {
            baseDao = Room.databaseBuilder(
                    context,
                    AppDatabase.class,
                    "ConfigurationData"
                    SqlitePath + "ConfigurationData"
            ).allowMainThreadQueries().build();
        }
        return baseDao;
    }
    public static AppDatabase getAsynchInstance(Context context){
    public static AppDatabase getAsynchInstance(Context context) {
        if (AsynchBaseDao == null) {
            AsynchBaseDao = Room.databaseBuilder(
app/src/main/java/com/dayu/recharge/net/SocketNet.java
@@ -2,6 +2,7 @@
import android.content.Context;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import com.dayu.recharge.activity.HomeActivity;
@@ -94,28 +95,22 @@
         */
        @Override
        public void onSocketConnSuccess(SocketAddress socketAddress) {
            Log.i("SocketActionListener", "连接成功");
            Log.i("SocketActionListener1111", "连接成功");
            MyApplication.myApplication.isConncet = true;
            rushState();
            DeviceNumber initCode = BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().findFirst();
            if (initCode == null && !MyApplication.myApplication.isDoInitMachine) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
            AdminDataBean adminData = BaseDaoSingleton.getInstance(MyApplication.myApplication).adminDao().findFirst();
            Log.i("SocketActionListener1111", "isDoInitMachine==" + MyApplication.myApplication.isDoInitMachine + "");
            if (!MyApplication.myApplication.isDoInitMachine) {
                Log.i("SocketActionListener1111", "isDoInitMachine");
                if (MyApplication.myApplication.ipBean != null && adminData != null) {
                    if (!TextUtils.isEmpty(adminData.getAddressCode())) {
                        Log.i("SocketActionListener1111", "initMachineRequestBean");
                        MyApplication.myApplication.initMachineRequestBean(MyApplication.myApplication.ipBean.getIp(), MyApplication.myApplication.ipBean.getPort(), adminData.getAddressCode());
                        AdminDataBean adminData = BaseDaoSingleton.getInstance(MyApplication.myApplication).adminDao().findFirst();
                        if (MyApplication.myApplication.ipBean != null && adminData != null) {
                            MyApplication.myApplication.initMachineRequestBean(MyApplication.myApplication.ipBean.getIp(), MyApplication.myApplication.ipBean.getPort(), adminData.getAddressCode());
                        }
                    }
                }, 500);
                }
            }
//            if (dataMessage != null) {
//                EasySocket.getInstance().upMessage(dataMessage);
//            }
            rushState();
        }
        /**
@@ -176,8 +171,12 @@
    };
    private void rushState() {
        if (HomeActivity.homeActivity != null) {
            HomeActivity.homeActivity.rushState();
        try {
            if (HomeActivity.homeActivity != null) {
                HomeActivity.homeActivity.rushState();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
app/src/main/java/com/dayu/recharge/utils/DeviceNumberUtils.java
@@ -13,6 +13,7 @@
 */
public class DeviceNumberUtils {
    //   获取充值机设备序列号
    public static String getDeviceNumber() {
        DeviceNumber deviceNumber = BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().findFirst();
        if (deviceNumber != null) {
@@ -22,7 +23,7 @@
        }
    }
    //    设置充值机设备序列号
    public static void setDeviceNumber(String deviceRegistrationNumber) {
        DeviceNumber deviceNumber = BaseDaoSingleton.getInstance(MyApplication.myApplication).deviceNumberDao().findFirst();
        if (deviceNumber != null) {