From a746b48c704b31e48469de67a78ff833a524359f Mon Sep 17 00:00:00 2001 From: apple Date: Fri, 16 Jun 2017 10:44:16 +0800 Subject: [PATCH 1/4] Foreground / Ndef && Tag read --- .../reactnativenfc/ReactNativeNFCModule.java | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java b/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java index 453454e..b907c2f 100644 --- a/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java +++ b/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java @@ -9,6 +9,7 @@ import android.os.AsyncTask; import android.os.Parcelable; import android.support.annotation.Nullable; +import android.app.PendingIntent; import com.facebook.react.bridge.ActivityEventListener; import com.facebook.react.bridge.Callback; @@ -31,6 +32,8 @@ public class ReactNativeNFCModule extends ReactContextBaseJavaModule implements private boolean startupIntentProcessed = false; + private NfcAdapter mNfcAdapter; + public ReactNativeNFCModule(ReactApplicationContext reactContext) { super(reactContext); reactContext.addActivityEventListener(this); @@ -53,10 +56,13 @@ public void onNewIntent(Intent intent) { private void handleIntent(Intent intent, boolean startupIntent) { if (intent != null && intent.getAction() != null) { + getReactApplicationContext() + .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) + .emit(EVENT_NFC_DISCOVERED, intent.getAction()); - switch (intent.getAction()){ + // switch (intent.getAction()){ - case NfcAdapter.ACTION_NDEF_DISCOVERED: + // case NfcAdapter.ACTION_NDEF_DISCOVERED: Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) { @@ -66,16 +72,16 @@ private void handleIntent(Intent intent, boolean startupIntent) { } processNdefMessages(messages,startupIntent); } - break; + // break; // ACTION_TAG_DISCOVERED is an unlikely case, according to https://developer.android.com/guide/topics/connectivity/nfc/nfc.html - case NfcAdapter.ACTION_TAG_DISCOVERED: - case NfcAdapter.ACTION_TECH_DISCOVERED: + // case NfcAdapter.ACTION_TAG_DISCOVERED: + // case NfcAdapter.ACTION_TECH_DISCOVERED: Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); processTag(tag,startupIntent); - break; + // break; - } + // } } } @@ -123,14 +129,35 @@ public void onHostResume() { } startupIntentProcessed = true; } + + if (mNfcAdapter != null) { + setupForegroundDispatch(getCurrentActivity(), mNfcAdapter); + } else { + mNfcAdapter = NfcAdapter.getDefaultAdapter(getReactApplicationContext()); + } } @Override - public void onHostPause() {} + public void onHostPause() { + if (mNfcAdapter != null) + stopForegroundDispatch(getCurrentActivity(), mNfcAdapter); + } @Override public void onHostDestroy() {} + public static void setupForegroundDispatch(final Activity activity, NfcAdapter adapter) { + final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass()); + intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + + final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0); + adapter.enableForegroundDispatch(activity, pendingIntent, null, null); + } + + public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) { + adapter.disableForegroundDispatch(activity); + } + private class NdefProcessingTask extends AsyncTask { From 693133b8ae1ad8af33a0b7d164bfdb727aace81b Mon Sep 17 00:00:00 2001 From: apple Date: Fri, 16 Jun 2017 13:07:35 +0800 Subject: [PATCH 2/4] add Foreground --- .../reactnativenfc/ReactNativeNFCModule.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java b/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java index b907c2f..0ec6ad7 100644 --- a/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java +++ b/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java @@ -56,13 +56,10 @@ public void onNewIntent(Intent intent) { private void handleIntent(Intent intent, boolean startupIntent) { if (intent != null && intent.getAction() != null) { - getReactApplicationContext() - .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - .emit(EVENT_NFC_DISCOVERED, intent.getAction()); - // switch (intent.getAction()){ + switch (intent.getAction()){ - // case NfcAdapter.ACTION_NDEF_DISCOVERED: + case NfcAdapter.ACTION_NDEF_DISCOVERED: Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) { @@ -72,16 +69,16 @@ private void handleIntent(Intent intent, boolean startupIntent) { } processNdefMessages(messages,startupIntent); } - // break; + break; // ACTION_TAG_DISCOVERED is an unlikely case, according to https://developer.android.com/guide/topics/connectivity/nfc/nfc.html - // case NfcAdapter.ACTION_TAG_DISCOVERED: - // case NfcAdapter.ACTION_TECH_DISCOVERED: + case NfcAdapter.ACTION_TAG_DISCOVERED: + case NfcAdapter.ACTION_TECH_DISCOVERED: Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); processTag(tag,startupIntent); - // break; + break; - // } + } } } From ac1b455d3bac624b8e0183424e40e8b05d2c53d1 Mon Sep 17 00:00:00 2001 From: apple Date: Fri, 16 Jun 2017 13:17:53 +0800 Subject: [PATCH 3/4] Ndef & tag read --- .../reactnativenfc/ReactNativeNFCModule.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java b/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java index 0ec6ad7..d0a8280 100644 --- a/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java +++ b/android/src/main/java/com/novadart/reactnativenfc/ReactNativeNFCModule.java @@ -57,9 +57,9 @@ public void onNewIntent(Intent intent) { private void handleIntent(Intent intent, boolean startupIntent) { if (intent != null && intent.getAction() != null) { - switch (intent.getAction()){ + // switch (intent.getAction()){ - case NfcAdapter.ACTION_NDEF_DISCOVERED: + // case NfcAdapter.ACTION_NDEF_DISCOVERED: Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) { @@ -69,16 +69,16 @@ private void handleIntent(Intent intent, boolean startupIntent) { } processNdefMessages(messages,startupIntent); } - break; + // break; // ACTION_TAG_DISCOVERED is an unlikely case, according to https://developer.android.com/guide/topics/connectivity/nfc/nfc.html - case NfcAdapter.ACTION_TAG_DISCOVERED: - case NfcAdapter.ACTION_TECH_DISCOVERED: + // case NfcAdapter.ACTION_TAG_DISCOVERED: + // case NfcAdapter.ACTION_TECH_DISCOVERED: Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); processTag(tag,startupIntent); - break; + // break; - } + // } } } From 82bfcf41c24c6392473133bba64f28891ec5440a Mon Sep 17 00:00:00 2001 From: apple Date: Mon, 19 Jun 2017 09:35:43 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E9=97=AA=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/novadart/reactnativenfc/parser/TagParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/novadart/reactnativenfc/parser/TagParser.java b/android/src/main/java/com/novadart/reactnativenfc/parser/TagParser.java index 3ae9a75..516d60e 100644 --- a/android/src/main/java/com/novadart/reactnativenfc/parser/TagParser.java +++ b/android/src/main/java/com/novadart/reactnativenfc/parser/TagParser.java @@ -11,6 +11,7 @@ public class TagParser { public static WritableMap parse(Tag tag){ + if (tag == null) return null; WritableMap result = new WritableNativeMap(); result.putString("type", NfcDataType.TAG.name());