Most visited

Recently visited

Added in API level 19

OffHostApduService

public abstract class OffHostApduService
extends Service

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


OffHostApduService是一个便利的 Service类,可以扩展以描述驻留在脱离主机上的一个或多个NFC应用程序,例如在嵌入式安全元件或UICC上。

Developer Guide

For a general introduction into the topic of card emulation, please read the NFC card emulation developer guide.

NFC Protocols

由该类别代表的脱离主机应用程序基于ISO / IEC 7816-4中定义的NFC论坛ISO-DEP协议(基于ISO / IEC 14443-4)和支持处理命令应用协议数据单元(APDU)规范。

Service selection

当远程NFC设备想要与脱离主机的NFC应用程序对话时,它会发送ISO / IEC 7816-4规范中定义的所谓“SELECT AID”APDU。 AID是ISO / IEC 7816-4中定义的应用程序标识符。

AID的注册程序在ISO / IEC 7816-5规范中定义。 如果您不想注册AID,则可以在专有范围内自由使用AID:第一个字节的第8-5位必须各设置为“1”。 例如,“0xF00102030405”是专有的AID。 如果确实使用专有AID,则建议选择至少6个字节的AID,以降低与可能使用专有AID的其他应用程序发生冲突的风险。

AID groups

在某些情况下,脱离主机环境可能需要注册多个AID才能实现某个应用程序,并且需要确保它是所有这些AID的默认处理程序(而不是组中的某些AID转到另一个服务)。

一个AID组是应该被OS视为一起归属的AID列表。 对于AID组中的所有AID,操作系统将保证以下之一:

In other words, there is no in-between state, where some AIDs in the group can be routed to this off-host execution environment, and some to another or a host-based HostApduService.

AID groups and categories

每个AID组都可以与一个类别关联。 这允许Android OS对服务进行分类,并允许用户在类别级别而不是AID级别设置默认值。

您可以使用 isDefaultServiceForCategory(android.content.ComponentName, String)来确定您的脱离主机服务是否为某个类别的默认处理程序。

在这个版本的平台中,唯一已知的类别是CATEGORY_PAYMENTCATEGORY_OTHER 没有类别或当前平台版本无法识别的类别的AID组将自动分组到CATEGORY_OTHER类别中。

Service AID registration

为了告知平台哪些AID位于脱离主机并由此服务管理,必须在服务声明中包含SERVICE_META_DATA条目。 下面显示了一个OffHostApduService清单声明的示例:

 <service android:name=".MyOffHostApduService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE">
     <intent-filter>
         <action android:name="android.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE"/>
     </intent-filter>
     <meta-data android:name="android.nfc.cardemulation.off_host_apdu_ervice" android:resource="@xml/apduservice"/>
 </service>
This meta-data tag points to an apduservice.xml file. An example of this file with a single AID group declaration is shown below:
 <offhost-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
           android:description="@string/servicedesc">
       <aid-group android:description="@string/subscription" android:category="other">
           <aid-filter android:name="F0010203040506"/>
           <aid-filter android:name="F0394148148100"/>
       </aid-group>
 </offhost-apdu-service>
 

<offhost-apdu-service>必须包含 <android:description>属性,该属性包含可能在UI中显示的用户友好的服务说明。

<offhost-apdu-service>必须包含一个或多个<aid-group>标签。 每个<aid-group>必须包含一个或多个<aid-filter>标签,每个标签包含一个AID。 AID必须以十六进制格式指定,并且包含偶数个字符。

该注册将允许将该服务作为用于类别的默认处理程序的选项。 根据用户选择哪个服务作为特定类别的处理程序,Android操作系统将负责将AID正确路由到脱离主机执行环境。

该服务可以定义Android命名空间之外的其他操作,以提供与脱离主机执行环境的进一步交互。

使用此类需要设备上存在 FEATURE_NFC_HOST_CARD_EMULATION

Summary

Constants

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

OffHostApduService()

Public methods

abstract IBinder onBind(Intent intent)

Android平台本身不会绑定到该服务,而只是使用其声明来跟踪服务感兴趣的AID。

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

SERVICE_INTERFACE

Added in API level 19
String SERVICE_INTERFACE

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

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

SERVICE_META_DATA

Added in API level 19
String SERVICE_META_DATA

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

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

Public constructors

OffHostApduService

Added in API level 19
OffHostApduService ()

Public methods

onBind

Added in API level 19
IBinder onBind (Intent intent)

Android平台本身不会绑定到此服务,而只是使用它的声明来跟踪服务感兴趣的AID。然后使用此信息向用户呈现可处理AID的应用程序列表因为正确地将这些AID路由到主机(如果用户更喜欢 HostApduService )或者脱离主机执行环境(如果用户更喜欢 OffHostApduService实施者可以在Android命名空间之外定义允许进一步交互的附加动作与脱离主机的执行环境一起使用。这种实现需要重写此方法。

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.

Hooray!