react-native-nfc-manager 4.0.0-beta.1 → 4.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +146 -49
  2. package/android/src/main/java/community/revteltech/nfc/MifareClassicHandler.java +419 -0
  3. package/android/src/main/java/community/revteltech/nfc/MifareUltralightHandler.java +84 -0
  4. package/android/src/main/java/community/revteltech/nfc/NdefHandler.java +397 -0
  5. package/android/src/main/java/community/revteltech/nfc/NfcAdapterStateChangedReceiver.java +48 -0
  6. package/android/src/main/java/community/revteltech/nfc/NfcErrorCodes.java +16 -0
  7. package/android/src/main/java/community/revteltech/nfc/NfcManager.java +348 -1087
  8. package/android/src/main/java/community/revteltech/nfc/NfcManagerIOSStubBase.java +130 -0
  9. package/android/src/main/java/community/revteltech/nfc/NfcTechIoRouter.java +258 -0
  10. package/android/src/main/java/community/revteltech/nfc/TagTechnologyRequest.java +19 -7
  11. package/android/src/main/java/community/revteltech/nfc/Util.java +275 -2
  12. package/app.plugin.js +8 -9
  13. package/dist/ndef-lib/constants.js +67 -0
  14. package/dist/ndef-lib/constants.js.map +1 -0
  15. package/dist/ndef-lib/index.js +79 -0
  16. package/dist/ndef-lib/index.js.map +1 -0
  17. package/dist/ndef-lib/ndef-text.js +29 -0
  18. package/dist/ndef-lib/ndef-text.js.map +1 -0
  19. package/dist/ndef-lib/ndef-uri.js +40 -0
  20. package/dist/ndef-lib/ndef-uri.js.map +1 -0
  21. package/dist/ndef-lib/ndef-wifi-simple.js +100 -0
  22. package/dist/ndef-lib/ndef-wifi-simple.js.map +1 -0
  23. package/dist/ndef-lib/ndef.js +152 -0
  24. package/dist/ndef-lib/ndef.js.map +1 -0
  25. package/dist/ndef-lib/stringifier.js +155 -0
  26. package/dist/ndef-lib/stringifier.js.map +1 -0
  27. package/dist/ndef-lib/util.js +134 -0
  28. package/dist/ndef-lib/util.js.map +1 -0
  29. package/dist/specs/NativeNfcManager.js +5 -0
  30. package/dist/specs/NativeNfcManager.js.map +1 -0
  31. package/dist/src/NativeNfcManager.js +55 -0
  32. package/dist/src/NativeNfcManager.js.map +1 -0
  33. package/dist/src/NfcError.js +220 -0
  34. package/dist/src/NfcError.js.map +1 -0
  35. package/dist/src/NfcManager.js +175 -0
  36. package/dist/src/NfcManager.js.map +1 -0
  37. package/dist/src/NfcManagerAndroid.js +112 -0
  38. package/dist/src/NfcManagerAndroid.js.map +1 -0
  39. package/dist/src/NfcManagerIOS.js +119 -0
  40. package/dist/src/NfcManagerIOS.js.map +1 -0
  41. package/dist/src/NfcTech/Iso15693HandlerIOS.js +99 -0
  42. package/dist/src/NfcTech/Iso15693HandlerIOS.js.map +1 -0
  43. package/dist/src/NfcTech/IsoDepHandler.js +29 -0
  44. package/dist/src/NfcTech/IsoDepHandler.js.map +1 -0
  45. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js +68 -0
  46. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js.map +1 -0
  47. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js +23 -0
  48. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js.map +1 -0
  49. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js +16 -0
  50. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js.map +1 -0
  51. package/dist/src/NfcTech/NdefHandler.js +54 -0
  52. package/dist/src/NfcTech/NdefHandler.js.map +1 -0
  53. package/dist/src/NfcTech/NfcAHandler.js +16 -0
  54. package/dist/src/NfcTech/NfcAHandler.js.map +1 -0
  55. package/dist/src/NfcTech/NfcVHandler.js +33 -0
  56. package/dist/src/NfcTech/NfcVHandler.js.map +1 -0
  57. package/dist/src/index.js +53 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/index.d.ts +110 -46
  60. package/ios/NfcManager.h +2 -11
  61. package/ios/NfcManager.mm +264 -438
  62. package/ios/RNNfcBridgeUtil.h +28 -0
  63. package/ios/RNNfcBridgeUtil.mm +52 -0
  64. package/ios/RNNfcManager+Felica.swift +61 -0
  65. package/ios/RNNfcManager+Iso15693.swift +895 -0
  66. package/ios/RNNfcManager+IsoDep.swift +145 -0
  67. package/ios/RNNfcManager+Mifare.swift +61 -0
  68. package/ios/RNNfcManager+Ndef.swift +120 -0
  69. package/ios/RNNfcManager.h +251 -0
  70. package/ios/RNNfcManager.swift +648 -0
  71. package/ios/RNNfcSessionDelegateProxy.swift +104 -0
  72. package/ios/RNNfcSwiftUtil.swift +34 -0
  73. package/ndef-lib/{constants.js → constants.ts} +2 -0
  74. package/ndef-lib/{index.js → index.ts} +23 -12
  75. package/ndef-lib/{ndef-text.js → ndef-text.ts} +7 -2
  76. package/ndef-lib/{ndef-uri.js → ndef-uri.ts} +8 -3
  77. package/ndef-lib/{ndef-wifi-simple.js → ndef-wifi-simple.ts} +34 -11
  78. package/ndef-lib/{ndef.js → ndef.ts} +53 -25
  79. package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
  80. package/ndef-lib/{util.js → util.ts} +23 -9
  81. package/package.json +39 -21
  82. package/react-native-nfc-manager.podspec +3 -2
  83. package/specs/NativeNfcManager.ts +18 -4
  84. package/src/NativeNfcManager.ts +84 -0
  85. package/src/{NfcError.js → NfcError.ts} +6 -17
  86. package/src/{NfcManager.js → NfcManager.ts} +51 -34
  87. package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +27 -8
  88. package/src/{NfcManagerIOS.js → NfcManagerIOS.ts} +31 -10
  89. package/src/NfcTech/{Iso15693HandlerIOS.js → Iso15693HandlerIOS.ts} +64 -36
  90. package/src/NfcTech/{IsoDepHandler.js → IsoDepHandler.ts} +8 -5
  91. package/src/NfcTech/{MifareClassicHandlerAndroid.js → MifareClassicHandlerAndroid.ts} +33 -24
  92. package/src/NfcTech/{MifareUltralightHandlerAndroid.js → MifareUltralightHandlerAndroid.ts} +14 -5
  93. package/src/NfcTech/{NdefFormatableHandlerAndroid.js → NdefFormatableHandlerAndroid.ts} +9 -2
  94. package/src/NfcTech/{NdefHandler.js → NdefHandler.ts} +19 -6
  95. package/src/NfcTech/{NfcAHandler.js → NfcAHandler.ts} +6 -3
  96. package/src/NfcTech/{NfcVHandler.js → NfcVHandler.ts} +8 -5
  97. package/src/__mocks__/{NativeNfcManager.js → NativeNfcManager.ts} +4 -1
  98. package/src/{index.js → index.ts} +1 -1
  99. package/android/src/main/java/community/revteltech/nfc/JsonConvert.java +0 -141
  100. package/android/src/main/java/community/revteltech/nfc/MifareUtil.java +0 -84
  101. package/ios/NfcManager+Felica.mm +0 -43
  102. package/ios/NfcManager+Iso15693.mm +0 -600
  103. package/ios/NfcManager+IsoDep.mm +0 -83
  104. package/ios/NfcManager+Mifare.mm +0 -43
  105. package/ios/Util.mm +0 -55
  106. package/specs/NativeNfcManager.d.ts +0 -6
  107. package/specs/NativeNfcManager.js +0 -3
  108. package/specs/NativeNfcManager.js.map +0 -1
  109. package/src/NativeNfcManager.js +0 -37
@@ -0,0 +1,397 @@
1
+ package community.revteltech.nfc;
2
+
3
+ import static community.revteltech.nfc.NfcErrorCodes.*;
4
+
5
+ import android.nfc.FormatException;
6
+ import android.nfc.NdefMessage;
7
+ import android.nfc.Tag;
8
+ import android.nfc.tech.Ndef;
9
+ import android.nfc.tech.NdefFormatable;
10
+ import android.nfc.tech.TagTechnology;
11
+ import android.os.Parcelable;
12
+ import android.util.Log;
13
+
14
+ import com.facebook.react.bridge.Arguments;
15
+ import com.facebook.react.bridge.Callback;
16
+ import com.facebook.react.bridge.ReadableArray;
17
+ import com.facebook.react.bridge.ReadableMap;
18
+ import com.facebook.react.bridge.WritableMap;
19
+
20
+ import org.json.JSONArray;
21
+ import org.json.JSONException;
22
+ import org.json.JSONObject;
23
+
24
+ class NdefHandler {
25
+ private static final String LOG_TAG = "ReactNativeNfcManager";
26
+
27
+ static class WriteNdefRequest {
28
+ NdefMessage message;
29
+ Callback callback;
30
+ boolean format;
31
+ boolean formatReadOnly;
32
+
33
+ WriteNdefRequest(NdefMessage message, Callback callback, boolean format, boolean formatReadOnly) {
34
+ this.message = message;
35
+ this.callback = callback;
36
+ this.format = format;
37
+ this.formatReadOnly = formatReadOnly;
38
+ }
39
+
40
+ void invokeCallback() {
41
+ Callback pendingCallback = takeCallback();
42
+ if (pendingCallback != null) {
43
+ pendingCallback.invoke();
44
+ }
45
+ }
46
+
47
+ void invokeCallbackWithError(String error) {
48
+ Callback pendingCallback = takeCallback();
49
+ if (pendingCallback != null) {
50
+ pendingCallback.invoke(error);
51
+ }
52
+ }
53
+
54
+ private Callback takeCallback() {
55
+ Callback pendingCallback = callback;
56
+ callback = null;
57
+ return pendingCallback;
58
+ }
59
+ }
60
+
61
+ private NdefHandler() {
62
+ }
63
+
64
+ static void getCachedNdefMessage(TagTechnologyRequest techRequest, Callback callback) {
65
+ if (techRequest == null) {
66
+ callback.invoke(ERR_NO_TECH_REQ);
67
+ return;
68
+ }
69
+
70
+ try {
71
+ WritableMap parsed = ndefToReact(techRequest.getTagHandle());
72
+ callback.invoke(null, parsed);
73
+ } catch (Exception ex) {
74
+ Log.d(LOG_TAG, ex.toString());
75
+ callback.invoke(ex.toString());
76
+ }
77
+ }
78
+
79
+ static void getNdefMessage(TagTechnologyRequest techRequest, Callback callback) {
80
+ if (techRequest == null) {
81
+ callback.invoke(ERR_NO_TECH_REQ);
82
+ return;
83
+ }
84
+
85
+ try {
86
+ TagTechnology techHandle = techRequest.getTechHandle();
87
+ if (!(techHandle instanceof Ndef)) {
88
+ callback.invoke(ERR_API_NOT_SUPPORT);
89
+ return;
90
+ }
91
+
92
+ Ndef ndef = (Ndef) techHandle;
93
+ if (!ndef.isConnected()) {
94
+ callback.invoke(ERR_NO_TECH_REQ);
95
+ return;
96
+ }
97
+
98
+ WritableMap parsed = ndefToReact(ndef, ndef.getNdefMessage());
99
+ callback.invoke(null, parsed);
100
+ } catch (Exception ex) {
101
+ Log.d(LOG_TAG, ex.toString());
102
+ callback.invoke(ex.toString());
103
+ }
104
+ }
105
+
106
+ static void queryNdefStatus(TagTechnologyRequest techRequest, Callback callback) {
107
+ if (techRequest == null) {
108
+ callback.invoke(ERR_NO_TECH_REQ);
109
+ return;
110
+ }
111
+
112
+ WritableMap writableMap = Arguments.createMap();
113
+ try {
114
+ Ndef ndef = Ndef.get(techRequest.getTagHandle());
115
+ writableMap.putInt("maxSize", ndef.getMaxSize());
116
+ writableMap.putBoolean("isWritable", ndef.isWritable());
117
+ writableMap.putBoolean("canMakeReadOnly", ndef.canMakeReadOnly());
118
+ callback.invoke(null, writableMap);
119
+ } catch (Exception ex) {
120
+ Log.d(LOG_TAG, ex.toString());
121
+ callback.invoke(ex.toString());
122
+ }
123
+ }
124
+
125
+ static void writeNdefMessage(
126
+ TagTechnologyRequest techRequest,
127
+ ReadableArray rnArray,
128
+ ReadableMap options,
129
+ Callback callback
130
+ ) {
131
+ if (techRequest == null) {
132
+ callback.invoke(ERR_NO_TECH_REQ);
133
+ return;
134
+ }
135
+
136
+ boolean reconnectAfterWrite = options.getBoolean("reconnectAfterWrite");
137
+ try {
138
+ Ndef ndef = (Ndef) techRequest.getTechHandle();
139
+ if (ndef == null) {
140
+ callback.invoke(ERR_API_NOT_SUPPORT);
141
+ return;
142
+ }
143
+
144
+ byte[] bytes = rnArrayToBytes(rnArray);
145
+ ndef.writeNdefMessage(new NdefMessage(bytes));
146
+ if (reconnectAfterWrite) {
147
+ ndef.close();
148
+ ndef.connect();
149
+ }
150
+ callback.invoke();
151
+ } catch (Exception ex) {
152
+ Log.d(LOG_TAG, ex.toString());
153
+ callback.invoke(ex.toString());
154
+ }
155
+ }
156
+
157
+ static void formatNdef(
158
+ TagTechnologyRequest techRequest,
159
+ ReadableArray rnArray,
160
+ ReadableMap options,
161
+ Callback callback
162
+ ) {
163
+ if (techRequest == null) {
164
+ callback.invoke(ERR_NO_TECH_REQ);
165
+ return;
166
+ }
167
+
168
+ boolean readOnly = options.getBoolean("readOnly");
169
+ try {
170
+ NdefFormatable ndef = (NdefFormatable) techRequest.getTechHandle();
171
+ if (ndef == null) {
172
+ callback.invoke(ERR_API_NOT_SUPPORT);
173
+ return;
174
+ }
175
+
176
+ byte[] bytes = rnArrayToBytes(rnArray);
177
+ NdefMessage msg = new NdefMessage(bytes);
178
+ if (readOnly) {
179
+ ndef.formatReadOnly(msg);
180
+ } else {
181
+ ndef.format(msg);
182
+ }
183
+ callback.invoke();
184
+ } catch (Exception ex) {
185
+ Log.d(LOG_TAG, ex.toString());
186
+ callback.invoke(ex.toString());
187
+ }
188
+ }
189
+
190
+ static void makeReadOnly(
191
+ TagTechnologyRequest techRequest,
192
+ Callback callback
193
+ ) {
194
+ if (techRequest == null) {
195
+ callback.invoke(ERR_NO_TECH_REQ);
196
+ return;
197
+ }
198
+
199
+ try {
200
+ Ndef ndef = (Ndef) techRequest.getTechHandle();
201
+ boolean result = ndef.makeReadOnly();
202
+ callback.invoke(null, result);
203
+ } catch (Exception ex) {
204
+ Log.d(LOG_TAG, ex.toString());
205
+ callback.invoke(ex.toString());
206
+ }
207
+ }
208
+
209
+ static WriteNdefRequest cancelNdefWrite(
210
+ WriteNdefRequest writeNdefRequest,
211
+ Callback callback
212
+ ) {
213
+ if (writeNdefRequest != null) {
214
+ writeNdefRequest.invokeCallbackWithError(ERR_CANCEL);
215
+ callback.invoke();
216
+ return null;
217
+ }
218
+
219
+ callback.invoke(ERR_NOT_REGISTERED);
220
+ return writeNdefRequest;
221
+ }
222
+
223
+ static WriteNdefRequest requestNdefWrite(
224
+ ReadableArray rnArray,
225
+ ReadableMap options,
226
+ boolean isForegroundEnabled,
227
+ boolean hasPendingRequest,
228
+ WriteNdefRequest writeNdefRequest,
229
+ Callback callback
230
+ ) {
231
+ if (!isForegroundEnabled) {
232
+ callback.invoke(ERR_NOT_REGISTERED);
233
+ return writeNdefRequest;
234
+ }
235
+
236
+ if (hasPendingRequest) {
237
+ callback.invoke(ERR_MULTI_REQ);
238
+ return writeNdefRequest;
239
+ }
240
+
241
+ boolean format = options.getBoolean("format");
242
+ boolean formatReadOnly = options.getBoolean("formatReadOnly");
243
+
244
+ try {
245
+ NdefMessage msgToWrite;
246
+ if (format && rnArray == null) {
247
+ msgToWrite = null;
248
+ } else {
249
+ byte[] bytes = rnArrayToBytes(rnArray);
250
+ msgToWrite = new NdefMessage(bytes);
251
+ }
252
+
253
+ return new WriteNdefRequest(
254
+ msgToWrite,
255
+ callback,
256
+ format,
257
+ formatReadOnly
258
+ );
259
+ } catch (FormatException e) {
260
+ callback.invoke(e.toString());
261
+ return writeNdefRequest;
262
+ }
263
+ }
264
+
265
+ static void writeNdef(
266
+ Tag tag,
267
+ WriteNdefRequest request
268
+ ) {
269
+ NdefMessage message = request.message;
270
+ boolean formatReadOnly = request.formatReadOnly;
271
+ boolean format = request.format;
272
+
273
+ if (format || formatReadOnly) {
274
+ NdefFormatable formatable = null;
275
+ try {
276
+ Log.d(LOG_TAG, "ready to writeNdef");
277
+ formatable = NdefFormatable.get(tag);
278
+ if (formatable == null) {
279
+ request.invokeCallbackWithError(ERR_API_NOT_SUPPORT);
280
+ } else {
281
+ Log.d(LOG_TAG, "ready to format ndef, seriously");
282
+ formatable.connect();
283
+ if (formatReadOnly) {
284
+ formatable.formatReadOnly(message);
285
+ } else {
286
+ formatable.format(message);
287
+ }
288
+ request.invokeCallback();
289
+ }
290
+ } catch (Exception ex) {
291
+ request.invokeCallbackWithError(ex.toString());
292
+ } finally {
293
+ closeQuietly(formatable);
294
+ }
295
+ } else {
296
+ Ndef ndef = null;
297
+ try {
298
+ Log.d(LOG_TAG, "ready to writeNdef");
299
+ ndef = Ndef.get(tag);
300
+ if (ndef == null) {
301
+ request.invokeCallbackWithError(ERR_API_NOT_SUPPORT);
302
+ } else if (!ndef.isWritable()) {
303
+ request.invokeCallbackWithError("tag is not writeable");
304
+ } else if (ndef.getMaxSize() < message.toByteArray().length) {
305
+ request.invokeCallbackWithError("tag size is not enough");
306
+ } else {
307
+ Log.d(LOG_TAG, "ready to writeNdef, seriously");
308
+ ndef.connect();
309
+ ndef.writeNdefMessage(message);
310
+ request.invokeCallback();
311
+ }
312
+ } catch (Exception ex) {
313
+ request.invokeCallbackWithError(ex.toString());
314
+ } finally {
315
+ closeQuietly(ndef);
316
+ }
317
+ }
318
+ }
319
+
320
+ private static void closeQuietly(android.nfc.tech.TagTechnology technology) {
321
+ if (technology == null) {
322
+ return;
323
+ }
324
+
325
+ try {
326
+ technology.close();
327
+ } catch (Exception ex) {
328
+ Log.d(LOG_TAG, "fail to close NDEF technology: " + ex);
329
+ }
330
+ }
331
+
332
+ static WritableMap ndefToReact(Ndef ndef, NdefMessage message) {
333
+ try {
334
+ JSONObject json = Util.ndefToJSON(ndef);
335
+ json.put("ndefMessage", message == null ? new JSONArray() : Util.messageToJSON(message));
336
+ return Util.jsonToReact(json);
337
+ } catch (JSONException ex) {
338
+ Log.e(LOG_TAG, "Failed to convert ndef into json", ex);
339
+ return null;
340
+ }
341
+ }
342
+
343
+ static WritableMap ndefToReact(Tag tag, Parcelable[] messages) {
344
+ try {
345
+ Ndef ndef = tag != null ? Ndef.get(tag) : null;
346
+ JSONObject json = buildNdefJSON(ndef, messages);
347
+ return Util.jsonToReact(json);
348
+ } catch (JSONException ex) {
349
+ return null;
350
+ }
351
+ }
352
+
353
+ static WritableMap ndefToReact(Tag tag) {
354
+ Ndef ndef = tag != null ? Ndef.get(tag) : null;
355
+ Parcelable[] messages = null;
356
+ if (ndef != null) {
357
+ messages = new NdefMessage[] { ndef.getCachedNdefMessage() };
358
+ }
359
+
360
+ try {
361
+ JSONObject json = buildNdefJSON(ndef, messages);
362
+ return Util.jsonToReact(json);
363
+ } catch (JSONException ex) {
364
+ return null;
365
+ }
366
+ }
367
+
368
+ private static JSONObject buildNdefJSON(Ndef ndef, Parcelable[] messages) {
369
+ JSONObject json = Util.ndefToJSON(ndef);
370
+
371
+ if (ndef == null && messages != null) {
372
+ try {
373
+ if (messages.length > 0) {
374
+ NdefMessage message = (NdefMessage) messages[0];
375
+ json.put("ndefMessage", Util.messageToJSON(message));
376
+ json.put("type", "NDEF");
377
+ }
378
+
379
+ if (messages.length > 1) {
380
+ Log.d(LOG_TAG, "Expected one ndefMessage but found " + messages.length);
381
+ }
382
+ } catch (JSONException e) {
383
+ Log.e(Util.TAG, "Failed to convert ndefMessage into json", e);
384
+ }
385
+ }
386
+
387
+ return json;
388
+ }
389
+
390
+ private static byte[] rnArrayToBytes(ReadableArray rArray) {
391
+ byte[] bytes = new byte[rArray.size()];
392
+ for (int i = 0; i < rArray.size(); i++) {
393
+ bytes[i] = (byte) (rArray.getInt(i) & 0xff);
394
+ }
395
+ return bytes;
396
+ }
397
+ }
@@ -0,0 +1,48 @@
1
+ package community.revteltech.nfc;
2
+
3
+ import android.content.BroadcastReceiver;
4
+ import android.content.Context;
5
+ import android.content.Intent;
6
+ import android.nfc.NfcAdapter;
7
+ import android.util.Log;
8
+
9
+ class NfcAdapterStateChangedReceiver extends BroadcastReceiver {
10
+ interface Listener {
11
+ void onStateChanged(String state);
12
+ }
13
+
14
+ private final String logTag;
15
+ private final Listener listener;
16
+
17
+ NfcAdapterStateChangedReceiver(String logTag, Listener listener) {
18
+ this.logTag = logTag;
19
+ this.listener = listener;
20
+ }
21
+
22
+ @Override
23
+ public void onReceive(Context context, Intent intent) {
24
+ Log.d(logTag, "onReceive " + intent);
25
+ final String action = intent.getAction();
26
+
27
+ if (action != null && action.equals(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED)) {
28
+ final int state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_OFF);
29
+ String stateStr = "unknown";
30
+ switch (state) {
31
+ case NfcAdapter.STATE_OFF:
32
+ stateStr = "off";
33
+ break;
34
+ case NfcAdapter.STATE_TURNING_OFF:
35
+ stateStr = "turning_off";
36
+ break;
37
+ case NfcAdapter.STATE_ON:
38
+ stateStr = "on";
39
+ break;
40
+ case NfcAdapter.STATE_TURNING_ON:
41
+ stateStr = "turning_on";
42
+ break;
43
+ }
44
+
45
+ listener.onStateChanged(stateStr);
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,16 @@
1
+ package community.revteltech.nfc;
2
+
3
+ public final class NfcErrorCodes {
4
+ public static final String ERR_CANCEL = "cancelled";
5
+ public static final String ERR_NOT_REGISTERED = "you should requestTagEvent first";
6
+ public static final String ERR_MULTI_REQ = "You can only issue one request at a time";
7
+ public static final String ERR_NO_TECH_REQ = "no tech request available";
8
+ public static final String ERR_NO_REFERENCE = "no reference available";
9
+ public static final String ERR_TRANSCEIVE_FAIL = "transceive fail";
10
+ public static final String ERR_API_NOT_SUPPORT = "unsupported tag api";
11
+ public static final String ERR_GET_ACTIVITY_FAIL = "fail to get current activity";
12
+ public static final String ERR_NO_NFC_SUPPORT = "no nfc support";
13
+
14
+ private NfcErrorCodes() {
15
+ }
16
+ }