Работа с NFC в Android всегда была непростой задачей. Нативный API требует от разработчика понимания низкоуровневых протоколов и механизмов обработки данных. Новый TAO NFC SDK (Android) призван решить эту проблему, предоставляя высокоуровневую абстракцию, которая значительно упрощает взаимодействие с NFC-метками.
Что такое TAO NFC SDK?
Это библиотека, созданная для упрощения NFC-операций в Android-приложениях. Её основная цель — сделать чтение, запись и управление NFC-метками максимально простым, особенно когда речь идёт о формате NDEF (NFC Data Exchange Format). SDK разработан с учётом расширяемости, позволяя разработчикам добавлять поддержку различных технологий и пользовательских форматов данных.
Ключевые особенности
- Высокоуровневый API: Вместо работы с низкоуровневыми деталями, SDK предоставляет простой и интуитивно понятный интерфейс для выполнения распространённых NFC-операций. 
- Полная поддержка NDEF: Обеспечивает надёжное чтение и запись NDEF-сообщений. 
- Гибкость: Вы можете создавать собственные обработчики - NfcHandlerдля различных технологий, а также использовать- NfcDataParserи- NfcDataPreparerдля поддержки пользовательских структур данных и их кодирования.
- Обработка ошибок: Стандартизированный перечень ошибок - NfcAdminErrorпозволяет получать подробные отчёты о проблемах.
- Система колбэков: Слушатели событий ( - Listeners) уведомляют приложение об изменении состояния NFC-адаптера, результатах чтения или записи и возникших ошибках.
Как начать? Пошаговая инструкция
Настройка SDK состоит из двух основных этапов: добавление зависимости и конфигурирование вашего проекта.
1. Добавление зависимости
Добавьте ссылку на глобальный репозиторий:
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
        repositories {
            mavenCentral()
            maven { url = uri("https://jitpack.io") }
        }
    }Добавьте зависимость:
dependencies {
            implementation("com.github.lordtao:android-tao-nfc:latestVersion")
    }Настройка AndroidManifest.xml
Для корректной работы приложения с NFC, вам нужно добавить несколько строк в файл AndroidManifest.xml:
Разрешение на использование NFC:
<uses-permission android:name="android.permission.NFC" />Объявление о поддержке NFC:
<uses-feature android:name="android.hardware.nfc" android:required="true" />Фильтры намерений (Intent Filters): Это позволяет вашей Activity получать уведомления, когда обнаруживается NFC-метка. Обязательно используйте launchMode="singleTop" или singleTask, чтобы onNewIntent() вызывался при обнаружении метки, когда Activity уже запущена.  
<activity
    android:name=".YourNfcHandlingActivity"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="*/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.nfc.action.TECH_DISCOVERED"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.nfc.action.TAG_DISCOVERED"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>Начало работы с кодом
Использование SDK начинается с инициализации NfcAdmin и NfcHandler. NfcAdmin — это основная точка входа, которая управляет режимами работы NFC-адаптера, а NfcHandler отвечает за логику взаимодействия с конкретным типом метки.
class YourNfcHandlingActivity : AppCompatActivity() {
    private lateinit var nfcAdmin: NfcAdmin
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...
        setupNfc()
    }
    private fun setupNfc() {
        // Создаем экземпляр NfcAdmin
        nfcAdmin = NfcAdmin(
            activity = this,
            isAdminLogEnabled = true, // Включаем логирование для отладки
            nfcStateListener = yourStateListener // Слушатель изменений состояния NFC
        )
        
        // Создаем обработчик для NDEF-меток с текстовыми данными
        val ndefTextHandler = NfcHandler(
            parser = YourTextDataParser(), // Пользовательский парсер
            preparer = YourTextDataPreparer(), // Пользовательский preparer
            nfcListener = yourNfcListener // Слушатель для результатов чтения/записи
        )
        
        // Добавляем обработчик в NfcAdmin
        nfcAdmin.addHandlers(ndefTextHandler)
    }
    override fun onResume() {
        super.onResume()
        // Регистрируем наблюдатель состояния NFC и включаем режим чтения
        nfcAdmin.registerNfcStateReceiver()
        nfcAdmin.enableReaderMode()
    }
    override fun onPause() {
        super.onPause()
        // Отключаем режим чтения и наблюдатель при паузе Activity
        nfcAdmin.disableReaderMode()
        nfcAdmin.unregisterNfcStateReceiver()
    }
} Для чтения и записи данных достаточно вызвать соответствующие методы в NfcHandler. Например, чтобы записать данные, нужно вызвать prepareToWrite(data) и поднести метку к устройству. Результат операции будет передан в NfcListener.  
Заключение
TAO NFC SDK (Android) — это отличный инструмент для разработчиков, которые хотят добавить NFC-функциональность в свои приложения, избежав при этом сложностей нативного API. Он предоставляет надёжную, расширяемую и простую в использовании основу для работы с NFC. Если вы ищете способ упростить разработку, этот SDK заслуживает вашего внимания.
 
           
 
kirich1409
Большая работа проделана. Спасибо!