Я создал код NFCTagFlow для использования при отправке текстового файла в тег NFC.
Это упрощенная версия использования считывателя RF881
Моя проблема может ли быть ненужный процесс отправки файла в тег?
Это правильно?
Код: Выделить всё
public class NFCTagFlow {
private Context context;
public NFCTagFlow(Context context) {
this.context = context;
}
public NdefMessage sendFileToTag(Tag detectedTag) {
try {
String filePath = "/storage/self/primary/Upload_in_NFC.txt";
StringBuilder fileDataStringBuilder = new StringBuilder();
// Read the file data into a buffer and get the string representation
readFileToBuffer(filePath, fileDataStringBuilder);
String fileContent = fileDataStringBuilder.toString();
// Encode the file data into an NDEF message
NdefMessage ndefMessage = encodeNdefData(fileContent);
// Write the NDEF message to the NFC tag
boolean success = writeNdefMessageToTag(detectedTag, ndefMessage);
// If successful, return the NdefMessage, otherwise return null
return success ? ndefMessage : null;
} catch (IOException e) {
e.printStackTrace();
}
return null; // Return null if writing failed
}
private void readFileToBuffer(String filePath, StringBuilder fileDataStringBuilder) throws IOException {
File file = new File(filePath);
if (!file.exists() || !file.isFile()) {
throw new IOException("Invalid file path or file does not exist");
}
try (FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(isr)) {
String line;
while ((line = br.readLine()) != null) {
fileDataStringBuilder.append(line);
}
}
}
private NdefMessage encodeNdefData(String data) {
NdefRecord ndefRecord = createTextNdefRecord(data);
return new NdefMessage(new NdefRecord[]{ndefRecord});
}
private NdefRecord createTextNdefRecord(String text) {
byte[] language = Locale.getDefault().getLanguage().getBytes(StandardCharsets.US_ASCII);
byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
int languageLength = language.length;
int textLength = textBytes.length;
byte[] payload = new byte[1 + languageLength + textLength];
payload[0] = (byte) (languageLength & 0x1F);
System.arraycopy(language, 0, payload, 1, languageLength);
System.arraycopy(textBytes, 0, payload, 1 + languageLength, textLength);
return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], payload);
}
public boolean writeNdefMessageToTag(Tag detectedTag, NdefMessage ndefMessage) {
Ndef ndef = Ndef.get(detectedTag);
if (ndef != null) {
try {
ndef.connect();
ndef.writeNdefMessage(ndefMessage);
showToast("NDEF message written successfully");
return true;
} catch (Exception e) {
e.printStackTrace();
showToast("Failed to write NDEF message");
} finally {
try {
ndef.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
showToast("NDEF not supported on this tag");
}
return false;
}
private void showToast(String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
Помогите мне, если есть что-то неправильное или ненужный код для процесса отправки текстового файла в тег nfc
Подробнее здесь: https://stackoverflow.com/questions/790 ... to-nfc-tag