Có! Bạn đang dùng đúng cách.
Để làm Delphi và FireMonkey công việc bạn có thể sử dụng template sau đây vì nó là đúng cách để đạt được những gì bạn có trong tâm trí:
Interface:
/ 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 Bộ điều hợp:
/////////////////////////// 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));
Trong trường hợp bạn chơi xung quanh với mẫu mã này, tôi khá chắc chắn rằng nó sẽ làm việc! Tôi đoán, bạn buộc phải tận dụng tối đa mọi thứ, chẳng hạn như sử dụng API hoàn toàn chéo và đa nền tảng, điều đó sẽ cho phép bạn có chính xác mã tương tự chạy trên Android and iOS mà không có bất kỳ thay đổi nào về mặt trước của ứng dụng và back-end. Đúng, đúng là một số công cụ hiện đang được phát triển nhắm mục tiêu để giải quyết đa nền tảng thực sự nhúng development, mà sẽ đạt được tích hợp đầy đủ có thể trong tương lai gần. Thật không may, thực tế là ở giai đoạn phát triển nền tảng di động hiện tại, bạn chỉ có thể sử dụng các công cụ đa nền tảng như vậy nếu bạn đang triển khai nhiều ứng dụng cơ bản hơn sẽ không phụ thuộc vào nhiều tài nguyên cụ thể hơn, chẳng hạn như NFC, Geofencing, v.v. Tất nhiên, nếu bạn không ở trong một môi trường sản xuất, thì cuối cùng bạn có thể có tất cả thời gian để chơi và hacking xung quanh cho vui. Nhưng giả sử rằng không phải là trường hợp, sau đó tiếp tục tập trung vào việc đưa mọi thứ lại với nhau để làm việc nhanh, như thời hạn giao hàng thường là chặt chẽ.
Điều đó nói rằng, cách nhanh nhất và ngắn nhất để đạt được giao tiếp thẻ NFC chỉ đơn giản bằng cách thực hiện với tài nguyên API NFC Android, vì nó đã được giới thiệu kể từ API cấp 9 - Android Gingerbread.
chuyển NFC có thể xảy ra giữa hai thiết bị NFC cho phép, hoặc giữa một thiết bị và một “tag” NFC. Thẻ có thể nằm trong số các thẻ thụ động truyền URL khi được quét đến các hệ thống phức tạp như các thẻ được sử dụng trong các giải pháp thanh toán NFC, chẳng hạn như Google Wallet.
Để đọc, viết, hoặc phát sóng thông điệp NFC, ứng dụng của bạn yêu cầu NFC cho phép biểu hiện:
<uses-permission android:name=”android.permission.NFC” />
Khi một thiết bị Android được sử dụng để quét một thẻ NFC, hệ thống sẽ giải mã tải trọng đến bằng cách sử dụng hệ thống gửi thẻ của riêng nó, phân tích thẻ, phân loại dữ liệu và sử dụng Intent để khởi chạy ứng dụng để nhận dữ liệu.
Đây là một mã số ảnh chụp cho thấy làm thế nào để đăng ký một Hoạt động đó sẽ trả lời chỉ để NFC tags:
<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>
Các NfcAdapter.EXTRA_TAG thêm bao gồm một đối tượng Tag liệu đại diện cho thẻ quét. Các NfcAdapter.EXTRA_TNDEF_MESSAGES thêm chứa một loạt các tin nhắn 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.
}
}
}
các tiềm năng và khả năng của NFC applications là rất lớn, và nhu cầu về công nghệ như vậy có xu hướng phát triển đáng kể:
Nếu bạn có thể sử dụng điện thoại thông minh làm phương thức thanh toán, thì việc thanh toán cho những thứ như phương tiện công cộng và bãi đậu xe có thể đơn giản như swipin g điện thoại của bạn. Bạn thậm chí có thể nhấn vào thiết bị đầu cuối báo trên tuyến đường đi làm hàng ngày để tải xuống sự cố mới nhất cho thiết bị của mình.
Nếu bạn vẫn còn bị mắc kẹt về điều này, @deterministicFail, tôi đã viết lên cách đọc và viết thẻ NFC trong ứng dụng Android Delphi cho XE5, XE6 và XE7. Bạn có thể tìm bài đăng có liên kết tới cả ba bài viết tại đây: http://blog.blong.com/2014/09/delphi-and-nfc-on-android.html Hãy tận hưởng! – blong