public final class CardEmulation
extends Object
java.lang.Object | |
↳ | android.nfc.cardemulation.CardEmulation |
该类可用于查询NFC卡仿真服务的状态。 有关NFC卡仿真的一般介绍,请阅读NFC card emulation developer guide 。
使用此类需要设备上存在 FEATURE_NFC_HOST_CARD_EMULATION
。
Constants |
|
---|---|
String |
ACTION_CHANGE_DEFAULT 活动操作:要求用户更改某个类别的默认卡模拟服务。 |
String |
CATEGORY_OTHER 可用于所有其他卡模拟服务的类别。 |
String |
CATEGORY_PAYMENT 用于NFC支付服务的类别。 |
String |
EXTRA_CATEGORY 额外的 |
String |
EXTRA_SERVICE_COMPONENT 对象 |
int |
SELECTION_MODE_ALWAYS_ASK |
int |
SELECTION_MODE_ASK_IF_CONFLICT |
int |
SELECTION_MODE_PREFER_DEFAULT |
Public methods |
|
---|---|
boolean |
categoryAllowsForegroundPreference(String category) 返回用户是否已允许在指定类别中注册的AID由前台应用程序首选的服务处理,而不是由预先配置的默认值处理。 |
List<String> |
getAidsForService(ComponentName service, String category) 检索服务的指定类别的当前注册的AID。 |
static CardEmulation |
getInstance(NfcAdapter adapter) 助手获得这个类的一个实例。 |
int |
getSelectionModeForCategory(String category) 返回传入类别的服务选择模式。 |
boolean |
isDefaultServiceForAid(ComponentName service, String aid) 允许应用程序查询服务当前是否为指定的ISO7816-4应用程序ID的默认处理程序。 |
boolean |
isDefaultServiceForCategory(ComponentName service, String category) 允许应用程序查询服务是否当前是处理卡模拟类别的默认服务。 |
boolean |
registerAidsForService(ComponentName service, String category, List<String> aids) 为特定服务注册特定类别的AID列表。 |
boolean |
removeAidsForService(ComponentName service, String category) 为所提供的服务删除先前注册的指定类别的AID列表。 |
boolean |
setPreferredService(Activity activity, ComponentName service) 允许前台应用程序指定在特定活动处于前台时应首选哪个卡模拟服务。 |
boolean |
supportsAidPrefixRegistration() 某些设备可能允许应用程序注册以某个前缀开头的所有AID,例如 |
boolean |
unsetPreferredService(Activity activity) 取消设置指定活动的首选服务。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
String ACTION_CHANGE_DEFAULT
活动操作:要求用户更改某个类别的默认卡模拟服务。 这将显示,询问他是否愿意与指定的组件名称标识的服务,以取代目前的默认服务用户的对话EXTRA_SERVICE_COMPONENT
,在指定的类别EXTRA_CATEGORY
常量值:“android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT”
String EXTRA_CATEGORY
额外的 ACTION_CHANGE_DEFAULT
类别。
也可以看看:
常数值:“类别”
String EXTRA_SERVICE_COMPONENT
对象 ComponentName
作为 ACTION_CHANGE_DEFAULT
的额外对象传入。
也可以看看:
常量值:“组件”
int SELECTION_MODE_ALWAYS_ASK
返回值为 getSelectionModeForCategory(String)
。
在此模式下,当使用 HostApduService
或 OffHostApduService
ISO-DEP卡仿真时,无论何时选择此类别的应用程序ID(AID),都会询问用户要使用哪个服务来处理事务,即使只有一个匹配服务。
常数值:1(0x00000001)
int SELECTION_MODE_ASK_IF_CONFLICT
返回值为 getSelectionModeForCategory(String)
。
在此模式下,当使用HostApduService
或OffHostApduService
使用ISO-DEP卡模拟时,如果阅读器选择的应用程序ID(AID)已由多个服务注册,则只会要求用户选择服务。 如果只有一个注册了AID的服务,那么该服务将被直接调用。
常量值:2(0x00000002)
int SELECTION_MODE_PREFER_DEFAULT
返回值为 getSelectionModeForCategory(String)
。
在此模式下,用户已为此类别设置了默认服务。
在 HostApduService
或 OffHostApduService
使用ISO-DEP卡仿真时,如果远程NFC设备选择默认服务已在此类别中注册的任何应用程序ID(AID),则该服务将自动被绑定以处理事务。
常量值:0(0x00000000)
boolean categoryAllowsForegroundPreference (String category)
返回用户是否已允许在指定类别中注册的AID由前台应用程序首选的服务处理,而不是由预先配置的默认值处理。 前台应用程序可以使用setPreferredService(Activity, ComponentName)
方法设置此类首选项。
Parameters | |
---|---|
category |
String : The category, e.g. CATEGORY_PAYMENT |
Returns | |
---|---|
boolean |
whether AIDs in the category can be handled by a service specified by the foreground app. |
List<String> getAidsForService (ComponentName service, String category)
检索服务的指定类别的当前注册的AID。
请注意,这只会返回使用registerAidsForService(ComponentName, String, List)
方法动态注册的registerAidsForService(ComponentName, String, List)
。 它将*不*返回在清单中静态注册的AID。
Parameters | |
---|---|
service |
ComponentName : The component name of the service |
category |
String : The category for which the AIDs were registered, e.g. CATEGORY_PAYMENT |
Returns | |
---|---|
List<String> |
The list of AIDs registered for this category, or null if it couldn't be found. |
CardEmulation getInstance (NfcAdapter adapter)
助手获得这个类的一个实例。
Parameters | |
---|---|
adapter |
NfcAdapter : A reference to an NfcAdapter object. |
Returns | |
---|---|
CardEmulation |
int getSelectionModeForCategory (String category)
返回传入类别的服务选择模式。 有效的返回值是:
SELECTION_MODE_PREFER_DEFAULT
该用户已请求此类别的默认服务,这将是首选。
SELECTION_MODE_ALWAYS_ASK
用户每次都要求询问他希望在此类别中使用何种服务。
SELECTION_MODE_ASK_IF_CONFLICT
如果存在冲突,则只会要求用户选择服务。
Parameters | |
---|---|
category |
String : The category, for example CATEGORY_PAYMENT |
Returns | |
---|---|
int |
the selection mode for the passed in category |
boolean isDefaultServiceForAid (ComponentName service, String aid)
允许应用程序查询服务当前是否为指定的ISO7816-4应用程序ID的默认处理程序。
Parameters | |
---|---|
service |
ComponentName : The ComponentName of the service |
aid |
String : The ISO7816-4 Application ID |
Returns | |
---|---|
boolean |
whether the service is the default handler for the specified AID 需要 |
boolean isDefaultServiceForCategory (ComponentName service, String category)
允许应用程序查询服务是否当前是处理卡模拟类别的默认服务。
请注意,如果getSelectionModeForCategory(String)
返回SELECTION_MODE_ALWAYS_ASK
或SELECTION_MODE_ASK_IF_CONFLICT
,则此方法将始终返回false。 这是因为在这些选择模式中,不能在类别级别设置默认值。 对于选择模式为SELECTION_MODE_ALWAYS_ASK
或SELECTION_MODE_ASK_IF_CONFLICT
,请使用isDefaultServiceForAid(ComponentName, String)
来确定服务是否为特定AID的默认值。
Parameters | |
---|---|
service |
ComponentName : The ComponentName of the service |
category |
String : The category |
Returns | |
---|---|
boolean |
whether service is currently the default service for the category. 需要 |
boolean registerAidsForService (ComponentName service, String category, List<String> aids)
为特定服务注册特定类别的AID列表。
如果此类服务的AID列表先前已为此服务注册(通过清单静态地或通过使用此API动态注册),那么此AID列表将替换为该列表。
请注意,您只能注册与此API的调用者使用相同UID下运行的服务的AID。 通常这意味着您需要从与服务本身相同的包中调用此服务,但UID也可以在使用共享UID的包之间共享。
Parameters | |
---|---|
service |
ComponentName : The component name of the service |
category |
String : The category of AIDs to be registered |
aids |
List : A list containing the AIDs to be registered |
Returns | |
---|---|
boolean |
whether the registration was successful. |
boolean removeAidsForService (ComponentName service, String category)
为所提供的服务删除先前注册的指定类别的AID列表。
请注意,这只会删除使用registerAidsForService(ComponentName, String, List)
方法动态注册的registerAidsForService(ComponentName, String, List)
。 它将*删除在清单中静态注册的AID。 如果使用此方法删除动态注册的AID,并且清单中存在相同类别的静态注册的AID组,则静态AID组将再次变为活动状态。
Parameters | |
---|---|
service |
ComponentName : The component name of the service |
category |
String : The category of the AIDs to be removed, e.g. CATEGORY_PAYMENT |
Returns | |
---|---|
boolean |
whether the group was successfully removed. |
boolean setPreferredService (Activity activity, ComponentName service)
允许前台应用程序指定在特定活动处于前台时应首选哪个卡模拟服务。
指定的活动目前必须处于恢复状态。 一个很好的范例是调用此方法在你onResume()
,并呼吁unsetPreferredService(Activity)
在onPause()
。
此方法调用将在两种特定情况下失败:
CATEGORY_PAYMENT
category, but the user has indicated that foreground apps are not allowed to override the default payment service. CATEGORY_OTHER
category that are also handled by the default payment service, and the user has indicated that foreground apps are not allowed to override the default payment service. 使用 categoryAllowsForegroundPreference(String)
来确定前台应用程序是否可以覆盖默认支付服务。
请注意,此首选项不会由操作系统持久保存,因此每次恢复活动时都必须调用该首选项。
Parameters | |
---|---|
activity |
Activity : The activity which prefers this service to be invoked |
service |
ComponentName : The service to be preferred while this activity is in the foreground |
Returns | |
---|---|
boolean |
whether the registration was successful |
boolean supportsAidPrefixRegistration ()
某些设备可能允许应用程序注册以某个前缀开头的所有AID,例如“A000000004 *”以注册所有的MasterCard AID。 使用此方法确定此设备是否支持注册AID前缀。
Returns | |
---|---|
boolean |
whether AID prefix registering is supported on this device. |
boolean unsetPreferredService (Activity activity)
取消设置指定活动的首选服务。
请注意,指定的活动在此次通话时仍然处于恢复状态。 调用此方法的一个好地方是在您的onPause()
实现中。
Parameters | |
---|---|
activity |
Activity : The activity which the service was registered for |
Returns | |
---|---|
boolean |
true when successful |