Most visited

Recently visited

Added in API level 24

HostNfcFService

public abstract class HostNfcFService
extends Service

java.lang.Object
   ↳ android.content.Context
     ↳ android.content.ContextWrapper
       ↳ android.app.Service
         ↳ android.nfc.cardemulation.HostNfcFService


HostNfcFService是一个便利的 Service类,可以扩展为模仿Android服务组件内的NFC-F卡。

NFC Protocols

此类模拟卡基于NFC-Forum NFC-F协议(基于JIS-X 6319-4规范)。

System Code and NFCID2 registration

A HostNfcFService service可以正好注册一个系统代码和一个NFCID2。 有关使用系统代码和NFCID2的详细信息,请参阅NFC论坛数字规范。

为了静态注册系统代码和NFCID2服务,必须在服务声明中包含 SERVICE_META_DATA条目。

清单中的所有 HostNfcFService声明都必须在其<service>标记中具有 BIND_NFC_SERVICE权限,以确保只有平台可以绑定到您的服务。

HostNfcFService清单声明的示例如下所示:

 <service android:name=".MyHostNfcFService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE">
     <intent-filter>
         <action android:name="android.nfc.cardemulation.action.HOST_NFCF_SERVICE"/>
     </intent-filter>
     <meta-data android:name="android.nfc.cardemulation.host_nfcf_service" android:resource="@xml/nfcfservice"/>
 </service>
This meta-data tag points to an nfcfservice.xml file. An example of this file with a System Code and NFCID2 declaration is shown below:
 <host-nfcf-service xmlns:android="http://schemas.android.com/apk/res/android"
           android:description="@string/servicedesc">
       <system-code-filter android:name="4000"/>
       <nfcid2-filter android:name="02FE000000000000"/>
 </host-nfcf-service>
 

<host-nfcf-service>必须包含 <android:description>属性,该属性包含可能在UI中显示的用户友好的服务描述。

<host-nfcf-service>必须包含:

或者,系统代码和NFCID2可以通过使用 registerSystemCodeForService(ComponentName, String)setNfcid2ForService(ComponentName, String)方法动态注册服务。

Service selection

当远程NFC设备想要与您的服务通信时,它会向NFC控制器发送SENSF_REQ命令,请求系统代码。 如果NfcFCardEmulation service已注册此系统代码并且已由前台应用程序启用,则NFC控制器将以注册此服务的NFCID2进行响应。 读者可以通过使用NFCID2继续与此服务进行数据交换。

Data exchange

选择服务后,所有发往该服务的NFCID2的帧将通过 processNfcFPacket(byte[], Bundle)发送,直到NFC链接断开。

当NFC链接断开时,将调用 onDeactivated(int)

Summary

Constants

int DEACTIVATION_LINK_LOSS

原因为 onDeactivated(int)

String SERVICE_INTERFACE

Intent必须声明为由服务处理的操作。

String SERVICE_META_DATA

包含有关此服务的更多信息的元数据元素的名称。

Inherited constants

From class android.app.Service
From class android.content.Context
From interface android.content.ComponentCallbacks2

Public constructors

HostNfcFService()

Public methods

final IBinder onBind(Intent intent)

将通信信道返回给服务。

abstract void onDeactivated(int reason)

此方法将在以下可能的情况下调用:

  • The NFC link has been lost

  • abstract byte[] processNfcFPacket(byte[] commandPacket, Bundle extras)

    当从远程设备接收到NFC-F数据包时,将调用此方法。

    final void sendResponsePacket(byte[] responsePacket)

    将响应数据包发送回远程设备。

    Inherited methods

    From class android.app.Service
    From class android.content.ContextWrapper
    From class android.content.Context
    From class java.lang.Object
    From interface android.content.ComponentCallbacks2
    From interface android.content.ComponentCallbacks

    Constants

    DEACTIVATION_LINK_LOSS

    Added in API level 24
    int DEACTIVATION_LINK_LOSS

    原因为onDeactivated(int) 表示取消激活是由于NFC链路丢失。

    常量值:0(0x00000000)

    SERVICE_INTERFACE

    Added in API level 24
    String SERVICE_INTERFACE

    Intent必须声明为由服务处理的操作。

    常量值:“android.nfc.cardemulation.action.HOST_NFCF_SERVICE”

    SERVICE_META_DATA

    Added in API level 24
    String SERVICE_META_DATA

    包含有关此服务的更多信息的元数据元素的名称。

    常量值:“android.nfc.cardemulation.host_nfcf_service”

    Public constructors

    HostNfcFService

    Added in API level 24
    HostNfcFService ()

    Public methods

    onBind

    Added in API level 24
    IBinder onBind (Intent intent)

    将通信信道返回给服务。 如果客户端无法绑定到服务,可能会返回null。 返回IBinder通常是一个复杂的界面已经described using aidl

    请注意,与其他应用程序组件不同,此处返回的IBinder接口调用可能不会发生在进程的主线程上 有关主线程的更多信息可以在Processes and Threads中找到。

    Parameters
    intent Intent: The Intent that was used to bind to this service, as given to Context.bindService. Note that any extras that were included with the Intent at that point will not be seen here.
    Returns
    IBinder Return an IBinder through which clients can call on to the service.

    onDeactivated

    Added in API level 24
    void onDeactivated (int reason)

    此方法将在以下可能的情况下调用:

  • The NFC link has been lost

    Parameters
    reason int: DEACTIVATION_LINK_LOSS
  • processNfcFPacket

    Added in API level 24
    byte[] processNfcFPacket (byte[] commandPacket, 
                    Bundle extras)

    当从远程设备接收到NFC-F数据包时,将调用此方法。 响应数据包可以通过在该方法中返回字节数组直接提供。 请注意,一般情况下,响应数据包必须尽快发送,因为当调用此方法时,用户可能会将其设备放在NFC读取器上。

    此方法在您的应用程序的主线程上运行。 如果您无法立即返回响应数据包,请返回null并稍后使用sendResponsePacket(byte[])方法。

    Parameters
    commandPacket byte: The NFC-F packet that was received from the remote device
    extras Bundle: A bundle containing extra data. May be null.
    Returns
    byte[] a byte-array containing the response packet, or null if no response packet can be sent at this point.

    sendResponsePacket

    Added in API level 24
    void sendResponsePacket (byte[] responsePacket)

    将响应数据包发送回远程设备。

    注意:这个方法可以从任何线程调用并且不会被阻塞。

    Parameters
    responsePacket byte: A byte-array containing the response packet.

    Hooray!