左晓为主开发手持机充值管理机
zuoxiao
2025-03-07 0ec9693c39a910233fc186a8cefab9f61030df78
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
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package com.dayu.baselibrary.activity;
 
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.os.Bundle;
 
import com.dayu.baselibrary.tools.nfc.HuaZhiNfcReadHepler;
import com.dayu.baselibrary.utils.ModelUtils;
import com.dayu.baselibrary.utils.TipUtil;
import com.pos.device.picc.PiccReader;
import com.pos.device.picc.PiccReaderCallback;
 
/**
 * author: zuo
 * Date: 2024-09-25
 * Time: 16:31
 * 备注:
 * * 子类在onNewIntent方法中进行NFC标签相关操作。
 * * launchMode设置为singleTop或singelTask,保证Activity的重用唯一
 * * 在onNewIntent方法中执行intent传递过来的Tag数据
 * * 将NFC标签卡靠近手机后部(NFC标签卡可网上自行购买)
 */
public abstract class BaseNfcActivity extends BaseActivity {
    protected NfcAdapter mNfcAdapter;
    private PendingIntent mPendingIntent;
    public static int adapterType = ModelUtils.defaultType;
 
 
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        switch (adapterType) {
            case ModelUtils.defaultType:
                onNfcBack(intent);
                break;
        }
    }
 
    /**
     * NFC寻到卡后的回调
     */
    public abstract void onNfcBack(Intent intent);
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        switch (ModelUtils.getModelType()) {
            case ModelUtils.defaultType:
            case ModelUtils.ShangMiType:
                adapterType = ModelUtils.defaultType;
                break;
            case ModelUtils.HuaZhiRongHaiType:
                adapterType = ModelUtils.HuaZhiRongHaiType;
                PiccReader.getInstance().startSearchCard(HuaZhiNfcReadHepler.TIMEOUT, new PiccReaderCallback() {
                    @Override
                    public void onSearchResult(int result, int cardType) {
                        if (result == PiccReaderCallback.SUCCESS) {
                            switch (cardType) {
                                //以下为M1卡
                                case PiccReader.MIFARE_ONE_S50:
                                case PiccReader.MIFARE_ONE_S70:
                                    onNfcBack(null);
                                    break;
                            }
                        }
                    }
                });
                break;
        }
 
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        //此处adapter需要重新获取,否则无法获取message
        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
        Intent intent = new Intent(this, getClass());
        //一旦截获NFC消息,就会通过PendingIntent调用窗口
        mPendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
    }
 
    /**
     * 获得焦点,按钮可以点击
     */
    @Override
    public void onResume() {
        super.onResume();
        if (!ifNFCUse(this)) {
        }
        //设置处理优于所有其他NFC的处理
        if (mNfcAdapter != null)
            mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
    }
 
    /**
     * 暂停Activity,界面获取焦点,按钮可以点击
     */
    @Override
    public void onPause() {
        super.onPause();
        //恢复默认状态
        if (mNfcAdapter != null)
            mNfcAdapter.disableForegroundDispatch(this);
 
 
    }
 
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
 
    }
 
    /**
     * 检测工作,判断设备的NFC支持情况
     *
     * @return
     */
    protected Boolean ifNFCUse(Activity context) {
        if (mNfcAdapter == null) {
            TipUtil.show(context, "设备不支持NFC!", new TipUtil.TipListener() {
                @Override
                public void onCancle() {
                    BaseNfcActivity.this.finish();
                }
            });
            return false;
        }
        if (mNfcAdapter != null && !mNfcAdapter.isEnabled()) {
            TipUtil.show(context, "请在系统设置中先启用NFC功能!");
            return false;
        }
        return true;
    }
 
}