- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 Firemonkey 和 Android 的新手,我不知道我的方法是否有误。我想让一个应用程序运行并读取一个 NFC 标签。
有没有办法在带有 firemonkey 的安卓设备上使用 NFC 阅读器?
通过 FMXExpress (http://www.fmxexpress.com/full-android-sdk-interface-files-in-object-pascal-for-firemonkey/) 的 NFCAdapter 的一部分,我可以确定设备是否有 NFC 阅读器以及它是否已启用。但是要使用所有功能,我必须手动定义所有接口(interface)并解决所有循环引用。我认为这不会导致探测解决方案。
我面临构建自己的 JavaClass 以与 nfc 适配器通信的解决方案,就像这篇博文中描述的那样:http://blong.com/Articles/DelphiXE5AndroidActivityResult/ActivityResult.htm#Building
最佳答案
是的!您正在采取正确的方法。
制作 Delphi 和 FireMonkey工作你可以使用以下 template因为这是实现您的想法的正确方法:
接口(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 适配器:
/////////////////////////// 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));
如果您尝试使用此示例代码,我很确定它会起作用!
我想,您被迫获得最好的一切,例如使用完全跨平台和多平台的 API,这将使您在 Android and iOS 上运行完全相同的代码。无需更改您的应用程序的前端和后端。是的,目前确实有一些工具正在开发中,旨在解决真正的多平台嵌入式问题 development ,这应该会在不久的将来实现完全集成。不幸的是,现实情况是,在移动平台开发的当前阶段,如果您正在实现不依赖于更具体资源(例如 NFC、Geofencing)的更基本的应用程序,您只能选择此类多平台工具。等等。当然,如果你不在生产环境中,那么最终你可能会有所有的时间去玩耍和四处寻找乐趣。但假设情况并非如此,那么请继续专注于将事情放在一起以快速工作,因为交付期限通常很紧。
也就是说,实现 NFC 标签通信的最快和最短的方法是简单地使用 Android NFC API 资源,因为它是自 API 级别 9 - Android Gingerbread 以来引入的。
NFC 传输可以发生在两个支持 NFC 的设备之间,或者发生在一个设备和一个 NFC“标签”之间。标签的范围从扫描时传输 URL 的被动标签到 NFC 支付解决方案中使用的复杂系统,例如 Google Wallet。 .
为了读取、写入或广播 NFC 消息,您的应用程序需要 NFC list 权限:
<uses-permission android:name=”android.permission.NFC” />
当 Android 设备用于扫描 NFC 标签时,系统将使用自己的标签分发系统对传入的有效负载进行解码,该系统会分析标签、对数据进行分类,并使用 Intent 启动应用程序以接收数据.
这是一个快照代码,展示了如何注册一个只响应 NFC tags 的 Activity 。 :
<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 extra 包含一个代表扫描标签的原始标签对象。 NfcAdapter.EXTRA_TNDEF_MESSAGES extra 包含一组 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.
}
}
}
NFC applications的潜力和可能性是巨大的,对这种技术的需求往往会显着增长:
如果您可以使用智能手机作为支付方式,那么支付公共(public)交通和 parking 计时器等费用就可以像刷手机一样简单。您甚至可以在每天上下类途中点击报纸终端,将最新一期下载到您的设备上。
关于android - Firemonkey 安卓 NFC 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24650883/
我有 3 个 AutoCompleteTextView,我想在它们上面注册 2 个 String[] 适配器。目前,我正在这样做: atw_from.setAdapter(new ArrayAdapt
我需要实现一个 recyclerView 来显示我对 Parse 的查询,所以我已经做到了: private class Pagination extends RecyclerView.OnScro
我对 BizTalk 相当陌生,目前我只是探索它的功能并了解不同部分(架构、编排、端口等)如何协同工作。我对其适配器有疑问: 不同的适配器是否已经随 BizTalk 服务器安装一起预装并准备好配置,或
我在 BizTalk 中测试 MQSC 适配器以与 Z/OS 主机上的队列通信时遇到问题。 测试场景:通过 Biztalk 发送消息时,我(强制)停止并启动主机 channel ,以模拟主机 IPL。
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我想用我的音频单元在iPhone上录制一条音频信号,该信号来自一条普通的3.5毫米音频电缆(例如,另一部iPhone作为声源)。 由于iPhone具有4端口耳机插孔,因此无法直接插入。 我尝试了不同种
[请参阅下面的更新] 我很难定义模式。我的同事说这是适配器模式。我不知道。我们陷入困境主要是因为我们想要正确命名我们的组件。 问题:是适配器模式吗?如果不是的话是什么?如果是其他事情,这是实现这个想法
我有点不熟悉Java KeyAdapter有效,并且使用 KeyAdapter 使用以下代码得到了意想不到的结果。当按下一个键而另一个键已按下时,就会出现此问题,无论 isKeyPressed() 是
我想知道如何通过 ORM 适配器使用 Node.js 在 MySQL 中创建多个表。我通过模型创建了一个表,即“us.js” module.exports = { identity: 'us'
我有一个 JavaFx 客户端。我正在使用一个具有 ObservableSet 作为字段的 bean 作为模型。我想将这些数据显示到 ListView 中,但我无法将我的字段类型更改为 Observa
我正在尝试在 native iOS 应用程序中实现基于表单的身份验证,但我需要在没有收到质询的情况下登录,我想打开一个表单并登录。我实现了一个包含 isCustomResponse 函数的 Chall
我正在尝试为我的迭代器和 const_iterator 类实现反向迭代器适配器,但遇到了一些麻烦。如果有人可以指导我解决这个问题,将不胜感激! 我的想法是我应该能够从我的 rbegin() 和 ren
使用 spring-integration-sftp,创建任意数量的入站 channel 适配器对象的推荐方法是什么?我的应用程序需要监视多个远程目录(1 到 n),直到运行时才知道。 最佳答案 当前
我正在尝试为我们自己的框架创建适配器。我们的框架使用自己的断言机制,因此我需要编写适配器。 适配器类非常简单,如下所示: public class AllureReportListener {
有没有什么方法可以使用命令行而不是使用 Worklight 控制台来部署 Worklight 适配器? (因为我的 worklight 服务器安装在 WAS 上,wsadmin 命令或类似的命令...
我想构建自己的自定义 log4j(网络)适配器来解决我的问题 that I posted here. 我查看了 log4j 的文档,但看不到开发人员在哪里/是否讨论如何执行此操作。 有人能给我指出正确
我使用消息驱动 channel 适配器从 weblogic JMS 队列接收作为字符串的 xml 消息,然后将此消息传递到 spring 集成 channel 以存储到数据库中,转换为不同的 xml,
有没有什么方法可以使用命令行而不是使用 Worklight 控制台来部署 Worklight 适配器? (因为我的 worklight 服务器安装在 WAS 上,wsadmin 命令或类似的命令...
我试图为 Android 制作一个聊天应用程序,所以我使用了 RecyclerView 。我的适配器有问题,我的聊天室收到的 JSON 响应显示为空白。我的代码是否遗漏了某些内容? 这是我的适配器类
如果这是重复的,我提前道歉。我对 Android 开发还是新手,并尝试寻找解决方案,但找不到有效的解决方案。 我正在创建一个待办事项应用程序并在我的适配器中收到此错误。 java.lang.NullP
我是一名优秀的程序员,十分优秀!