From 3ad6ae7486e86f0af3039c5ec431871ab445f14d Mon Sep 17 00:00:00 2001 From: Hoang Date: Tue, 26 Nov 2019 15:42:14 +0100 Subject: [PATCH 1/8] NFC module v0.1 Signed-off-by: Hoang --- .../java/com/example/nfcapp/NFChandler.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 app/src/main/java/com/example/nfcapp/NFChandler.java diff --git a/app/src/main/java/com/example/nfcapp/NFChandler.java b/app/src/main/java/com/example/nfcapp/NFChandler.java new file mode 100644 index 0000000..dd14155 --- /dev/null +++ b/app/src/main/java/com/example/nfcapp/NFChandler.java @@ -0,0 +1,102 @@ +package com.example.nfcapp; + +import android.content.Intent; +import android.nfc.NdefMessage; +import android.nfc.NdefRecord; +import android.nfc.NfcAdapter; +import android.nfc.NfcEvent; +import android.os.Build; +import android.os.Parcelable; +import android.widget.Toast; + +import androidx.fragment.app.Fragment; + +import java.nio.charset.Charset; +import java.util.ArrayList; + +public class NFChandler extends Fragment implements NfcAdapter.OnNdefPushCompleteCallback, + NfcAdapter.CreateNdefMessageCallback{ + + //The array lists to hold our messages + private ArrayList messagesToSendArray = new ArrayList<>(); + private ArrayList messagesReceivedArray = new ArrayList<>(); + + private NfcAdapter mNfcAdapter; + + public NdefRecord[] createRecords() { + + NdefRecord[] records = new NdefRecord[messagesToSendArray.size() + 1]; + //To Create Messages Manually if API is less than + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + for (int i = 0; i < messagesToSendArray.size(); i++){ + byte[] payload = messagesToSendArray.get(i). + getBytes(Charset.forName("UTF-8")); + NdefRecord record = new NdefRecord( + NdefRecord.TNF_WELL_KNOWN, //Our 3-bit Type name format + NdefRecord.RTD_TEXT, //Description of our payload + new byte[0], //The optional id for our Record + payload); //Our payload for the Record + + records[i] = record; + } + } + //Api is high enough that we can use createMime, which is preferred. + else { + for (int i = 0; i < messagesToSendArray.size(); i++){ + byte[] payload = messagesToSendArray.get(i). + getBytes(Charset.forName("UTF-8")); + + NdefRecord record = NdefRecord.createMime("text/plain",payload); + records[i] = record; + } + } + records[messagesToSendArray.size()] = + NdefRecord.createApplicationRecord(getActivity().getPackageName()); + return records; + } + + private void handleNfcIntent(Intent NfcIntent) { + if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(NfcIntent.getAction())) { + Parcelable[] receivedArray = + NfcIntent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); + + if(receivedArray != null) { + messagesReceivedArray.clear(); + NdefMessage receivedMessage = (NdefMessage) receivedArray[0]; + NdefRecord[] attachedRecords = receivedMessage.getRecords(); + + for (NdefRecord record:attachedRecords) { + String string = new String(record.getPayload()); + //Make sure we don't pass along our AAR (Android Application Record) + if (string.equals(getActivity().getPackageName())) { continue; } + messagesReceivedArray.add(string); + } + Toast.makeText(getActivity(), "Received " + messagesReceivedArray.size() + + " Messages", Toast.LENGTH_LONG).show(); + //updateTextViews(); + } + else { + Toast.makeText(getActivity(), "Received Blank Parcel", Toast.LENGTH_LONG).show(); + } + } + } + + @Override + public NdefMessage createNdefMessage(NfcEvent nfcEvent) { + //This will be called when another NFC capable device is detected. + if (messagesToSendArray.size() == 0) { + return null; + } + //We'll write the createRecords() method in just a moment + NdefRecord[] recordsToAttach = createRecords(); + //When creating an NdefMessage we need to provide an NdefRecord[] + return new NdefMessage(recordsToAttach); + } + + @Override + public void onNdefPushComplete(NfcEvent nfcEvent) { + //This is called when the system detects that our NdefMessage was + //Successfully sent. + messagesToSendArray.clear(); + } +} From 7c7630e66b6079a35da9e65eb9d11b3177f7b549 Mon Sep 17 00:00:00 2001 From: Hoang Date: Mon, 2 Dec 2019 19:37:10 +0100 Subject: [PATCH 2/8] NFC isoliert. In main NFC-Komponente als Kommentare gelassen zur Sicherheit. Signed-off-by: Hoang --- app/app.iml | 3 +- .../java/com/example/nfcapp/MainActivity.java | 335 ++++++++++++------ .../java/com/example/nfcapp/NFChandler.java | 29 +- 3 files changed, 264 insertions(+), 103 deletions(-) diff --git a/app/app.iml b/app/app.iml index 2aa7e8e..d6c6fd9 100755 --- a/app/app.iml +++ b/app/app.iml @@ -20,7 +20,7 @@