The landscape of Android development has changed. With the evolution of the .NET ecosystem and the fragmentation of Android API levels, developers need tools that are not just compatible, but optimized for the future. Winsoft NFCNet Library for Android v10 is here to answer that call.
Gone are the days of wrestling with native Android SDK wrappers and inconsistent .NET bindings. Version 10 represents a significant leap forward, rebuilt to align with the latest Android standards and the modern .NET unification.
Android 10 introduced scoped storage and stricter runtime permissions. The new NFCNet v10 seamlessly adapts to these changes. The library now handles ACCESS_FINE_LOCATION permission (required for NFC scanning on Android 10) automatically, with built-in dialogs and fallback mechanisms. winsoft nfcnet library for android v10 new
Fix: Enable reader.setLegacyMifareWorkaround(true) in v10—this is a new property that active retries with corrected bit timings.
If your goal is to write tags, the process is similar but you must format the data into TNdefMessage. The landscape of Android development has changed
procedure TMainForm.WriteToTag;
var
Msg: TNdefMessage;
Rec: TNdefRecord;
begin
if not Nfc1.Active then Exit;
// Create a Record
Rec := TNdefRecord.Create;
Rec.Tnf := tnWellKnown; // Type Name Format
Rec.Text := 'Hello World'; // Helper property (Newer library versions handle payload encoding)
// Create a Message container
Msg := TNdefMessage.Create;
Msg.AddRecord(Rec);
// Write logic usually happens inside the OnTag event or immediately after detection
// Assuming you have a detected 'CurrentTag' variable:
// CurrentTag.WriteNdefMessage(Msg);
end;
public class NFCScanner private NFCNetReader reader; private Activity activity;public void start(Activity act) this.activity = act; reader = NFCNet.getInstance().getReader(act); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) reader.enableForegroundDispatch(); else reader.enable(); reader.setReaderCallback(new NFCNetReader.ReaderCallback() @Override public void onTagDiscovered(TagInfo tagInfo) String uid = bytesToHex(tagInfo.getUid()); Log.i("NFC", "UID: " + uid); // Example: read NDEF if present Ndef ndef = Ndef.get(tagInfo.getTag()); if (ndef != null) try ndef.connect(); NdefMessage msg = ndef.getNdefMessage(); // process NDEF catch (IOException e) @Override public void onError(Exception e) Log.e("NFC", "Error", e); ); private String bytesToHex(byte[] bytes) StringBuilder sb = new StringBuilder(); for (byte b : bytes) sb.append(String.format("%02X", b)); return sb.toString();
One standout feature is the ability to use external USB NFC readers via USB host mode (OTG). This is critical for enterprise applications where built-in NFC range is insufficient. The v10 new version includes drivers for popular readers like ACR122U, SCL3711, and HID Omnikey.
| Feature | v10 Capability | | :--- | :--- | | Min SDK | API 23 (Android 6.0) | | Target SDK | API 34 (Android 14) | | Architecture | arm64-v8a, armeabi-v7a, x86_64 | | Dependencies | No external JNI libraries – pure Java/Kotlin | | Licensing | Runtime license (per developer or per app) | One standout feature is the ability to use
| Issue | Solution |
|-------|----------|
| No tag detection in background | Use foreground dispatch + activity in foreground |
| MIFARE Classic fails | Ensure screen unlocked; try reader.enableReaderMode() |
| HCE not responding | Add android:requireDeviceUnlock="false" in XML |
| Multiple tags detected | Use reader.setMaxTags(1) |
| Battery drain | Disable reader in onPause() |