Адаптер NFC Firemonkey для Android Oh! Android

Enable fgd

Put the following line of code in the onResume method :

if (mNfcAdapter != null) {
        mNfcAdapter.enableForegroundDispatch(this, pendingIntent, mIntentFilters, mTechLists);
    }

Why is this in the onResume? As the docs state : enableForegroundDispatch() must be called from the main thread and only when the activity is in the foreground (calling in onResume() guarantees this)

This should enable your app to receive the intent, of course, when actually running.
If you want to receive intents while not running, you’d have to go to the AndroidManifest.

Github — alberteije/nfc-e-desktop-delphi: nfc-e — delphi

Este protótipo funcional foi desenvolvido juntamente com o e-book
Manual de Implantação da NFC-e Desktop [Delphi] disponível em http://www.alberteije.com/livros/delphi_nfce/.

Segue um vídeo apresentando este protótipo feito em Delphi.
Este é um protótipo funcional e com algum trabalho a mais você terá um sistema pronto para produção.

Configure a qualidade de exibição para «automático» ou selecione a melhor qualidade (HD).

telas


Protótipo feito no Delphi XE5. Protótipo feito com arquitetura cliente/servidor (duas camadas).

Structure

Using the following structure, you’d have 4 fields :

private PendingIntent pendingIntent;
private IntentFilter[] mIntentFilters;
private String[][] mTechLists;
private NfcAdapter mNfcAdapter;

In the onCreate you’d get :

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
    pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    mIntentFilters = new IntentFilter[]{new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED)};
    mTechLists = new String[][]{new String[]{Ndef.class.getName()},
                new String[]{NdefFormatable.class.getName()}};
}

This does not actually enable the Foreground Dispatch yet, it is just the preparation.
The application would receive the Ndef and NdefFormatable technologies
Why do we subscribe for ACTION_NDEF_DISCOVERED ?

Проблемы NFC:  Использование бонусов Avito и газпромнефти для осуществления платежей

The order in which Android tries to handle the intent is as such :

  1. ACTION_NDEF_DISCOVERED
  2. ACTION_TECH_DISCOVERED
  3. ACTION_TAG_DISCOVERED

So we make sure our app is the first to be looked at by Android.

Using nfc in delphi xe7 (and later) android apps

Source files Android (Library) is in RAD Studio sub-folders

C:ProgramacaoEmbarcaderoStudio190sourcertlandroid

§

Source files Android (Library) is in RAD Studio sub-folders

C:ProgramacaoEmbarcaderoStudio190sourcertlandroid

Адаптер nfc firemonkey для android

Да! Вы принимаете правильный подход.

Чтобы сделать работу Delphi и FireMonkey, вы можете использовать следующие , так как это правильный способ добиться того, что вы имеете в виду:

Интерфейс:

/ JNI NFC import demo
// Note - REQUIRES - PROJECT OPTIONS - USES PERMISSIONS - NFC

interface

uses
Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText,
FMX.Helpers.Android,
SysUtils,
Classes;

type

Адаптер NFC:

  /////////////////////////// NfcAdapter /////////////////////////////////
JNfcManager = interface;
JNfcAdapter = interface;

JNfcAdapterClass = interface(JObjectClass)
['{634258AC-7931-4E38-97E6-48DBF688A288}']
{Property methods}
function _ACTION_TAG_DISCOVERED: JString; cdecl;
function _EXTRA_ID: JString; cdecl;
function _EXTRA_NDEF_MESSAGES: JString; cdecl;
function _EXTRA_TAG: JString; cdecl;
{Properties}
property ACTION_TAG_DISCOVERED: JString read _ACTION_TAG_DISCOVERED;
property EXTRA_ID: JString read _EXTRA_ID;
property EXTRA_NDEF_MESSAGES: JString read _EXTRA_NDEF_MESSAGES;
property EXTRA_TAG: JString read _EXTRA_TAG;
end;

[JavaSignature('android/nfc/NfcAdapter')]
JNfcAdapter = interface(JObject)
['{364D8F3F-23AE-4C28-A261-E30C0893B24C}']
//Return true if this NFC Adapter has any features enabled
function isEnabled: Boolean; cdecl;
end;

TJNfcAdapter = class(TJavaGenericImport<JNfcAdapterClass, JNfcAdapter>) end;

NfcManager:

  /////////////////////////// NfcManager /////////////////////////////////

JNfcManagerClass = interface(JObjectClass)
['{812481E1-F491-47D2-AC1F-4C5AB509532B}']
end;

[JavaSignature('android/nfc/NfcManager')]
JNfcManager = interface(JObject)
['{04B707EC-966A-4E4F-85DC-F003B7C9ACE3}']
{Methods}
function getDefaultAdapter: JNfcAdapter; cdecl;
end;

TJNfcManager = class(TJavaGenericImport<JNfcManagerClass, JNfcManager>) end;

function HasNfc: Boolean;
function IsNfcEnabled: Boolean;

implementation

function GetNfcManager: JNfcManager;
var
ConnectivityServiceNative: JObject;
begin
ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.NFC_SERVICE);
if not Assigned(ConnectivityServiceNative) then
raise Exception.Create('Could not locate Nfc Service');
Result := TJNfcManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);
if not Assigned(Result) then
raise Exception.Create('Could not access Nfc Manager');
end;

function HasNfc: Boolean;
var
NfcManager: JNfcManager;
NfcAdapter: JNfcAdapter;
begin
NfcManager := GetNfcManager;
NfcAdapter := NfcManager.getDefaultAdapter;
Result := Assigned(NfcAdapter);
end;

function IsNfcEnabled: Boolean;
var
NfcManager: JNfcManager;
NfcAdapter: JNfcAdapter;
begin
NfcManager := GetNfcManager;
NfcAdapter := NfcManager.getDefaultAdapter;
Result := Assigned(NfcAdapter)and NfcAdapter.isEnabled;
end;

end.

{code}

usage
Memo1.Lines.Add('Nfc Enabled: ' BoolToStr(IsNfcEnabled, True));

Если вы играете с этим примером кода, я уверен, что он сработает!

Проблемы NFC:  Как активировать NFC на Samsung Galaxy A10? - Pagb

Я предполагаю, что вам нужно получить лучшее из всего, например, используя API, который является полностью крестным и многоплатформенным, что позволит вам иметь точно такой же код, который работает на Android и iOS без каких-либо изменений в вашем интерфейсе и интерфейсе приложения. Да, верно, что некоторые инструменты в настоящее время находятся в стадии разработки для решения реальной многоплатформенной встроенной разработки, которая должна полностью интегрировать интеграцию, возможно, в ближайшую будущее. К сожалению, на самом деле на нынешних этапах разработки мобильных платформ вы можете использовать только такие многоплатформенные инструменты, если вы используете более простые приложения, которые не будут зависеть от более конкретных ресурсов, таких как NFC, Geofencing и т.д. Конечно, если вы не находитесь в производственной среде, то в конечном итоге у вас может быть все время, чтобы играть и взламывать ради удовольствия. Но предположим, что это не так, а затем сосредоточьтесь на том, чтобы собрать вещи вместе, чтобы работать быстро, так как срок доставки обычно плотный.

Тем не менее, быстрый и кратчайший путь к достижению связи с NFC-тегами — это просто сделать это с помощью ресурса API NFC API, поскольку он был введен с уровня API 9 — Android Gingerbread.

enter image description here

Передачи NFC могут происходить между двумя устройствами с поддержкой NFC или между устройством и тегом NFC. Теги могут варьироваться от пассивных тегов, которые передают URL-адрес при сканировании в сложные системы, как те, которые используются в платежных решениях NFC, например Google Wallet.

enter image description here

Чтобы читать, записывать или транслировать сообщения NFC, вашему приложению требуется разрешение манифеста NFC:

<uses-permission android:name="android.permission.NFC" />

Когда устройство Android используется для сканирования тега NFC, система будет декодировать входящую полезную нагрузку, используя собственную систему отправки тегов, которая анализирует тег, классифицирует данные и использует намерение для запуска приложения для приема данных.

Проблемы NFC:  Смартфоны с NFC до 15000 рублей - топ лучших в 2021 году

Вот код моментального снимка, показывающий, как регистрировать активность, которая будет отвечать только на теги NFC:

<activity android:name=".BlogViewer">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="http"android:host="blog.example.com"/>
</intent-filter>
</activity>

В NfcAdapter.EXTRA_TAG дополнительно добавлен необработанный объект Tag, который представляет отсканированный тег. NfcAdapter.EXTRA_TNDEF_MESSAGES дополнительно содержит массив сообщений NDEF:

String action = getIntent().getAction();

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
Parcelable[] messages =
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
for (int i = 0; i < messages.length; i ) {
NdefMessage message = (NdefMessage)messages[i];
NdefRecord[] records = message.getRecords();
for (int j = 0; j < records.length; j ) {
NdefRecord record = records[j];
// TODO Process the individual records.
}
}
}

enter image description here

Потенциал и возможности приложений NFC огромны, и спрос на такую ​​технологию имеет тенденцию значительно расти:

enter image description here

Если вы можете использовать свой смартфон в качестве способа оплаты, то оплата за такие вещи, как общественный транспорт и парковочные счетчики, может быть такой же простой, как прокрутка телефона. Вы даже можете нажать на газетный терминал на ежедневной поездке, чтобы загрузить последнюю версию на свое устройство.

Оцените статью
NFC в смартфонах
Добавить комментарий