Most visited

Recently visited

Added in API level 9

NfcAdapter

public final class NfcAdapter
extends Object

java.lang.Object
   ↳ android.nfc.NfcAdapter


代表本地NFC适配器。

使用助手 getDefaultAdapter(Context)获取此Android设备的默认NFC适配器。

Developer Guides

有关使用NFC的更多信息,请阅读 Near Field Communication开发人员指南。

要执行设备之间的基本文件共享,请阅读 Sharing Files with NFC

Summary

Nested classes

interface NfcAdapter.CreateBeamUrisCallback

 

interface NfcAdapter.CreateNdefMessageCallback

当另一个能够进行NDEF推送的NFC设备(Android Beam)处于范围内时,要调用的回调。

interface NfcAdapter.OnNdefPushCompleteCallback

系统成功将您的NdefMessage到其他设备时要调用的回调。

interface NfcAdapter.OnTagRemovedListener

将标记从字段中删除时调用的回调。

interface NfcAdapter.ReaderCallback

当前台活动在阅读器模式下运行时系统找到标签时要调用的回调。

Constants

String ACTION_ADAPTER_STATE_CHANGED

广播动作:本地NFC适配器的状态已更改。

String ACTION_NDEF_DISCOVERED

意图在发现具有NDEF有效载荷的标签时开始活动。

String ACTION_TAG_DISCOVERED

意图在发现标签时开始一项活动。

String ACTION_TECH_DISCOVERED

意图在发现标签并在标签上注册特定技术的活动时开始活动。

String EXTRA_ADAPTER_STATE

ACTION_ADAPTER_STATE_CHANGED意图中 ACTION_ADAPTER_STATE_CHANGED请求当前电源状态的int额外字段。

String EXTRA_ID

包含含有所发现的标签的ID为一个字节数组可选的额外 ACTION_NDEF_DISCOVEREDACTION_TECH_DISCOVERED ,和 ACTION_TAG_DISCOVERED意图。

String EXTRA_NDEF_MESSAGES

Extra包含已发现标签上存在的 NdefMessage数组。

String EXTRA_READER_PRESENCE_CHECK_DELAY

Int Extra用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

String EXTRA_TAG

包含强制性额外 Tag这是发现了 ACTION_NDEF_DISCOVEREDACTION_TECH_DISCOVERED ,并 ACTION_TAG_DISCOVERED意图。

int FLAG_READER_NFC_A

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

int FLAG_READER_NFC_B

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

int FLAG_READER_NFC_BARCODE

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

int FLAG_READER_NFC_F

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

int FLAG_READER_NFC_V

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

int FLAG_READER_NO_PLATFORM_SOUNDS

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

int FLAG_READER_SKIP_NDEF_CHECK

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

int STATE_OFF

int STATE_ON

int STATE_TURNING_OFF

int STATE_TURNING_ON

Public methods

void disableForegroundDispatch(Activity activity)

禁用前台调度到给定的活动。

void disableForegroundNdefPush(Activity activity)

此方法在API级别14中已弃用。请改用setNdefPushMessage(NdefMessage, Activity, Activity...)

void disableReaderMode(Activity activity)

将NFC适配器恢复到正常操作模式:支持点对点(Android Beam),卡模拟和轮询所有支持的标签技术。

void enableForegroundDispatch(Activity activity, PendingIntent intent, IntentFilter[] filters, String[][] techLists)

启用前台分派到给定的活动。

void enableForegroundNdefPush(Activity activity, NdefMessage message)

此方法在API级别14中已弃用。请改用setNdefPushMessage(NdefMessage, Activity, Activity...)

void enableReaderMode(Activity activity, NfcAdapter.ReaderCallback callback, int flags, Bundle extras)

在此活动处于前台时,将NFC控制器限制为阅读器模式。

static NfcAdapter getDefaultAdapter(Context context)

助手获取默认的NFC适配器。

boolean ignore(Tag tag, int debounceMs, NfcAdapter.OnTagRemovedListener tagRemovedListener, Handler handler)

表示您不再有兴趣与NFC标签进行通信,只要它仍在范围内即可。

boolean invokeBeam(Activity activity)

手动调用Android Beam以共享数据。

boolean isEnabled()

如果此NFC适配器启用了任何功能,则返回true。

boolean isNdefPushEnabled()

如果启用了NDEF推送(Android Beam)功能,则返回true。

void setBeamPushUris(Uri[] uris, Activity activity)

使用Android Beam(TM)设置一个或多个 Uri发送。

void setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback callback, Activity activity)

设置一个回 Uri ,它将动态生成一个或多个使用Android Beam(TM)发送的 Uri

void setNdefPushMessage(NdefMessage message, Activity activity, Activity... activities)

使用Android Beam(TM)设置一个静态 NdefMessage发送。

void setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback callback, Activity activity, Activity... activities)

使用Android Beam(TM)设置一个动态生成NDEF消息的回调。

void setOnNdefPushCompleteCallback(NfcAdapter.OnNdefPushCompleteCallback callback, Activity activity, Activity... activities)

在成功的Android Beam(TM)上设置回调。

Inherited methods

From class java.lang.Object

Constants

ACTION_ADAPTER_STATE_CHANGED

Added in API level 18
String ACTION_ADAPTER_STATE_CHANGED

广播动作:本地NFC适配器的状态已更改。

例如,NFC已打开或关闭。

总是包含额外的字段 EXTRA_ADAPTER_STATE

常量值:“android.nfc.action.ADAPTER_STATE_CHANGED”

ACTION_NDEF_DISCOVERED

Added in API level 10
String ACTION_NDEF_DISCOVERED

意图在发现具有NDEF有效载荷的标签时开始活动。

系统检查第一个NdefRecord中的第一个NdefMessage并查找URI,SmartPoster或MIME记录。 如果找到URI或SmartPoster记录,意图将在其数据字段中包含该URI。 如果找到MIME记录,意图将在其类型字段中包含MIME类型。 这允许活动注册IntentFilter以标记特定内容为目标。 活动应该注册最具体的意图过滤器,以避免活动选择器对话框,当用户与屏幕交互时,这可能会干扰与标签的交互。

如果标签具有NDEF有效载荷,则该意图在ACTION_TECH_DISCOVERED之前ACTION_TECH_DISCOVERED 如果有任何活动对此意图作出响应, ACTION_TECH_DISCOVEREDACTION_TAG_DISCOVERED都不会启动。

此意图的MIME类型或数据URI在分派之前进行规范化 - 以便MIME,URI方案和URI主机始终为小写。

常量值:“android.nfc.action.NDEF_DISCOVERED”

ACTION_TAG_DISCOVERED

Added in API level 9
String ACTION_TAG_DISCOVERED

意图在发现标签时开始一项活动。

如果任何活动对当前标签响应 ACTION_NDEF_DISCOVEREDACTION_TECH_DISCOVERED ,则在发现标签时不会启动此意图。

常量值:“android.nfc.action.TAG_DISCOVERED”

ACTION_TECH_DISCOVERED

Added in API level 10
String ACTION_TECH_DISCOVERED

意图在发现标签并在标签上注册特定技术的活动时开始活动。

要接收此意图,活动必须包含此操作的意图过滤器,并在清单meta-data条目中指定所需的技术类型。 这是一个最好的例子:

 <activity android:name=".nfc.TechFilter" android:label="NFC/TechFilter">
     <!-- Add a technology filter -->
     <intent-filter>
         <action android:name="android.nfc.action.TECH_DISCOVERED" />
     </intent-filter>

     <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
         android:resource="@xml/filter_nfc"
     />
 </activity>

元数据XML文件应包含一个或多个tech-list条目,每个条目包含一个或多个tech条目。 tech条目是指实现该技术的合格类名称,例如“android.nfc.tech.NfcA”。

如果有任何的标记匹配tech-list集的一个子集Tag.getTechList() tech-list的每一个都被独立考虑,并且该活动被认为是匹配是任何单个tech-list匹配发现的标签。 这为过滤所需的技术提供了AND和OR语义。 下面是将匹配使用任何标签的示例NfcF或任何标签使用NfcAMifareClassic ,和Ndef

 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <!-- capture anything using NfcF -->
     <tech-list>
         <tech>android.nfc.tech.NfcF</tech>
     </tech-list>

     <!-- OR -->

     <!-- capture all MIFARE Classics with NDEF payloads -->
     <tech-list>
         <tech>android.nfc.tech.NfcA</tech>
         <tech>android.nfc.tech.MifareClassic</tech>
         <tech>android.nfc.tech.Ndef</tech>
     </tech-list>
 </resources>

这个意图是在ACTION_NDEF_DISCOVERED之后和ACTION_TAG_DISCOVERED之前ACTION_TAG_DISCOVERED 如果有任何活动响应ACTION_NDEF_DISCOVERED此意图不会启动。 如果有任何活动响应这个意图ACTION_TAG_DISCOVERED将不会启动。

常量值:“android.nfc.action.TECH_DISCOVERED”

EXTRA_ADAPTER_STATE

Added in API level 18
String EXTRA_ADAPTER_STATE

ACTION_ADAPTER_STATE_CHANGEDACTION_ADAPTER_STATE_CHANGED请求当前电源状态的int extra字段。 可能的值有: STATE_OFFSTATE_TURNING_ONSTATE_ONSTATE_TURNING_OFF

常量值:“android.nfc.extra.ADAPTER_STATE”

EXTRA_ID

Added in API level 9
String EXTRA_ID

包含含有所发现的标签的ID为一个字节数组可选的额外 ACTION_NDEF_DISCOVEREDACTION_TECH_DISCOVERED ,和 ACTION_TAG_DISCOVERED意图。

常量值:“android.nfc.extra.ID”

EXTRA_NDEF_MESSAGES

Added in API level 9
String EXTRA_NDEF_MESSAGES

Extra包含发现标签上存在的 NdefMessage数组。

这额外的强制要求 ACTION_NDEF_DISCOVERED意图,以及可选 ACTION_TECH_DISCOVEREDACTION_TAG_DISCOVERED意图。

当这个额外的东西出现时,总会有至少一个NdefMessage元素。 大多数NDEF标签只有一个NDEF消息,但是我们使用一个数组来实现未来的兼容性。

常量值:“android.nfc.extra.NDEF_MESSAGES”

EXTRA_READER_PRESENCE_CHECK_DELAY

Added in API level 19
String EXTRA_READER_PRESENCE_CHECK_DELAY

Int Extra与 enableReaderMode(Activity, ReaderCallback, int, Bundle)一起使用。

设置这个额外的整数允许调用应用程序指定平台将用于对任何发现的标签执行状态检查的延迟。

常数值:“存在”

EXTRA_TAG

Added in API level 10
String EXTRA_TAG

包含强制性额外 Tag这是发现了 ACTION_NDEF_DISCOVEREDACTION_TECH_DISCOVERED ,并 ACTION_TAG_DISCOVERED意图。

常量值:“android.nfc.extra.TAG”

FLAG_READER_NFC_A

Added in API level 19
int FLAG_READER_NFC_A

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

设置此标志可启用Nfc-A技术的轮询。

常数值:1(0x00000001)

FLAG_READER_NFC_B

Added in API level 19
int FLAG_READER_NFC_B

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

设置此标志可启用Nfc-B技术的轮询。

常量值:2(0x00000002)

FLAG_READER_NFC_BARCODE

Added in API level 19
int FLAG_READER_NFC_BARCODE

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

设置此标志可启用NfcBarcode技术的轮询。

常量值:16(0x00000010)

FLAG_READER_NFC_F

Added in API level 19
int FLAG_READER_NFC_F

标志使用 enableReaderMode(Activity, ReaderCallback, int, Bundle)

设置此标志可启用Nfc-F技术的轮询。

常量值:4(0x00000004)

FLAG_READER_NFC_V

Added in API level 19
int FLAG_READER_NFC_V

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

设置此标志可启用Nfc-V(ISO15693)技术的轮询。

常量值:8(0x00000008)

FLAG_READER_NO_PLATFORM_SOUNDS

Added in API level 19
int FLAG_READER_NO_PLATFORM_SOUNDS

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

设置此标志允许呼叫者在发现标签时阻止平台播放声音。

常量值:256(0x00000100)

FLAG_READER_SKIP_NDEF_CHECK

Added in API level 19
int FLAG_READER_SKIP_NDEF_CHECK

国旗用于 enableReaderMode(Activity, ReaderCallback, int, Bundle)

设置此标志允许调用方阻止平台对其找到的标签执行NDEF检查。

常量值:128(0x00000080)

STATE_OFF

Added in API level 18
int STATE_OFF

常数值:1(0x00000001)

STATE_ON

Added in API level 18
int STATE_ON

常量值:3(0x00000003)

STATE_TURNING_OFF

Added in API level 18
int STATE_TURNING_OFF

常量值:4(0x00000004)

STATE_TURNING_ON

Added in API level 18
int STATE_TURNING_ON

常量值:2(0x00000002)

Public methods

disableForegroundDispatch

Added in API level 10
void disableForegroundDispatch (Activity activity)

禁用前台调度到给定的活动。

调用 enableForegroundDispatch(Activity, PendingIntent, IntentFilter[], String[][]) ,活动必须在完成其回调 onPause()之前调用此方法。

该方法必须从主线程调用。

需要 NFC权限。

Parameters
activity Activity: the Activity to disable dispatch to
Throws
IllegalStateException if the Activity has already been paused

disableForegroundNdefPush

Added in API level 10
void disableForegroundNdefPush (Activity activity)

此方法在API级别14中已弃用。
改为使用setNdefPushMessage(NdefMessage, Activity, Activity...)

禁用P2P上的NDEF消息。

在调用 enableForegroundNdefPush(Activity, NdefMessage) ,一个活动必须在它的 onPause()回调完成之前调用此方法。

强烈建议使用新的 setNdefPushMessage(NdefMessage, Activity, Activity...)代替:它会自动挂钩到您的活动生命周期中,因此您无需在onResume / onPause中调用启用/禁用。

该方法必须从主线程调用。

需要 NFC权限。

Parameters
activity Activity: the Foreground activity
Throws
IllegalStateException if the Activity has already been paused

disableReaderMode

Added in API level 19
void disableReaderMode (Activity activity)

将NFC适配器恢复到正常操作模式:支持点对点(Android Beam),卡模拟和轮询所有支持的标签技术。

Parameters
activity Activity: the Activity that currently has reader mode enabled

enableForegroundDispatch

Added in API level 10
void enableForegroundDispatch (Activity activity, 
                PendingIntent intent, 
                IntentFilter[] filters, 
                String[][] techLists)

启用前台分派到给定的活动。

当将发现的 Tag给应用程序时,这将给予前台活动优先权。

如果为此方法提供了任何IntentFilters,则它们将用于匹配ACTION_NDEF_DISCOVEREDACTION_TAG_DISCOVERED调度意向。 由于ACTION_TECH_DISCOVERED依赖于IntentFilter匹配的元数据,因此Intent通过分别传递技术列表来处理。 技术列表中的每个第一级条目代表一系列必须全部匹配的技术。 如果任何第一级别集匹配,则通过给定的PendingIntent路由分派。 换句话说,第二个级别被“与”在一起,并且第一级别的条目被“或”在一起。

如果您为 filterstechLists参数传递 null作为通配符,并且会导致前台活动通过 ACTION_TAG_DISCOVERED意图接收所有标记。

该方法必须从主线程中调用,并且只在活动处于前台(恢复)状态时调用。 另外,活动必须在完成onPause()回调之前调用disableForegroundDispatch(Activity) ,以便在启用后禁用前台分派。

需要 NFC权限。

Parameters
activity Activity: the Activity to dispatch to
intent PendingIntent: the PendingIntent to start for the dispatch
filters IntentFilter: the IntentFilters to override dispatching for, or null to always dispatch
techLists String: the tech lists used to perform matching for dispatching of the ACTION_TECH_DISCOVERED intent
Throws
IllegalStateException if the Activity is not currently in the foreground

enableForegroundNdefPush

Added in API level 10
void enableForegroundNdefPush (Activity activity, 
                NdefMessage message)

此方法在API级别14中已弃用。
改为使用setNdefPushMessage(NdefMessage, Activity, Activity...)

当此活动处于前台时,启用NFC上的NDEF消息推送。

每次活动恢复时,您都必须明确地调用此方法,并且您的活动完成之前必须致电 disableForegroundNdefPush(Activity) onPause()

强烈建议使用新的 setNdefPushMessage(NdefMessage, Activity, Activity...) :它会自动挂钩到您的活动生命周期中,因此您无需在onResume / onPause中调用启用/禁用。

为了使NDEF正常工作,其他NFC设备必须支持NFC论坛的SNEP(简单Ndef交换协议)或Android的“com.android.npp”(Ndef Push Protocol)。 这在姜饼水平的Android NFC设备上是可选的,但SNEP在冰淇淋三明治及其他方面是强制性的。

该方法必须从主线程调用。

需要 NFC权限。

Parameters
activity Activity: foreground activity
message NdefMessage: a NDEF Message to push over NFC
Throws
IllegalStateException if the activity is not currently in the foreground

enableReaderMode

Added in API level 19
void enableReaderMode (Activity activity, 
                NfcAdapter.ReaderCallback callback, 
                int flags, 
                Bundle extras)

在此活动处于前台时,将NFC控制器限制为阅读器模式。

在此模式下,NFC控制器将仅充当NFC标签读取器/写入器,从而禁用此设备上NFC适配器的任何点对点(Android Beam)和卡模拟模式。

使用FLAG_READER_SKIP_NDEF_CHECK可防止平台在阅读器模式下执行任何NDEF检查。 请注意,这将阻止Ndef标记技术在标记上被枚举,并且基于NDEF的标记分派将无法正常工作。

要使用Android的基于主机的卡模拟与其他Android设备上模拟的标签交互,建议的标志是 FLAG_READER_NFC_AFLAG_READER_SKIP_NDEF_CHECK

Parameters
activity Activity: the Activity that requests the adapter to be in reader mode
callback NfcAdapter.ReaderCallback: the callback to be called when a tag is discovered
flags int: Flags indicating poll technologies and other optional parameters
extras Bundle: Additional extras for configuring reader mode.

getDefaultAdapter

Added in API level 10
NfcAdapter getDefaultAdapter (Context context)

助手获取默认的NFC适配器。

大多数Android设备将只有一个NFC适配器(NFC控制器)。

这个帮手相当于:

 NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE);
 NfcAdapter adapter = manager.getDefaultAdapter();

Parameters
context Context: the calling application's context
Returns
NfcAdapter the default NFC adapter, or null if no NFC adapter exists

ignore

Added in API level 24
boolean ignore (Tag tag, 
                int debounceMs, 
                NfcAdapter.OnTagRemovedListener tagRemovedListener, 
                Handler handler)

表示您不再有兴趣与NFC标签进行通信,只要它仍在范围内即可。 所有未来尝试与此标签进行通信都将失败,并显示IOException NFC控制器将进入低功率轮询模式,允许设备在其始终“附加”到标签的情况下(例如汽车底座中的标签)节省电力。 此外,debounceMs参数允许您指定标记在需要再次分派之前需要超出范围的时间。 注意:NFC控制器通常以非常缓慢的间隔(100-500 ms)轮询。 这意味着,如果标签反复进入和退出范围(例如,在出现片状连接的情况下),并且控制器在每次标签超出范围时发生轮询,它将*在*之后重新发送标签反之,尽管标签在间隔期间已经“在范围内”。 注2:如果在调用此API后检测到具有其他UID的标签,则其效果将被取消; 如果此标签在debounceMs中指定的时间量之前出现,它将再次分派。 注3:一些标签有一个随机的UID,在这种情况下,这个API不能可靠地工作。

Parameters
tag Tag: the Tag to ignore.
debounceMs int: minimum amount of time the tag needs to be out of range before being dispatched again.
tagRemovedListener NfcAdapter.OnTagRemovedListener: listener to be called when the tag is removed from the field. Note that this will only be called if the tag has been out of range for at least debounceMs, or if another tag came into range before debounceMs. May be null in case you don't want a callback.
handler Handler: the Handler that will be used for delivering the callback. if the handler is null, then the thread used for delivering the callback is unspecified.
Returns
boolean false if the tag couldn't be found (or has already gone out of range), true otherwise

invokeBeam

Added in API level 21
boolean invokeBeam (Activity activity)

手动调用Android Beam以共享数据。

Android Beam动画通常仅在两个具有NFC功能的设备进入范围时才会显示。 通过调用此方法,即使没有其他NFC设备在范围内,Activity也可以直接调用Beam动画。 Beam动画会提示用户点击另一个支持NFC的设备来完成数据传输。

使用这种方法的主要优点是它避免了用户点击屏幕完成传输的需要,因为这种方法已经确定了传输的方向并且用户同意共享数据。 呼叫者负责确保用户已同意在NFC分接头上共享数据。

请注意,要使用此方法,传入的“活动”必须已使用诸如 setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback, Activity)类的方法调用将数据设置为通过Beam进行共享。

Parameters
activity Activity: the current foreground Activity that has registered data to share
Returns
boolean whether the Beam animation was successfully invoked

isEnabled

Added in API level 9
boolean isEnabled ()

如果此NFC适配器启用了任何功能,则返回true。

如果此方法返回false,则NFC硬件保证不会通过其NFC无线电产生或响应任何NFC通信。

应用程序可以使用它来检查NFC是否启用。 应用程序可以请求设置UI,以允许用户使用以下方式切换NFC:

startActivity(new Intent(Settings.ACTION_NFC_SETTINGS))

Returns
boolean true if this NFC Adapter has any features enabled

也可以看看:

isNdefPushEnabled

Added in API level 16
boolean isNdefPushEnabled ()

如果启用了NDEF推送(Android Beam)功能,则返回true。

只有同时启用NFC和启用NDEF推送功能,此功能才会返回true。

请注意,如果NFC已启用但NDEF推送被禁用,则此设备仍然可以 接收 NDEF消息,但它不能发送它们。

应用程序不能直接切换NDEF推送功能,但他们可以请求设置UI,允许用户使用 startActivity(new Intent(Settings.ACTION_NFCSHARING_SETTINGS))来切换NDEF推送

需要NDEF推送的活动中的示例用法:

 protected void onResume() {
     super.onResume();
     if (!nfcAdapter.isEnabled()) {
         startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
     } else if (!nfcAdapter.isNdefPushEnabled()) {
         startActivity(new Intent(Settings.ACTION_NFCSHARING_SETTINGS));
     }
 }

Returns
boolean true if NDEF Push feature is enabled

也可以看看:

setBeamPushUris

Added in API level 16
void setBeamPushUris (Uri[] uris, 
                Activity activity)

使用Android Beam(TM)设置一个或多个Uri发送。 您提供的每个Uri都必须具有方案“文件”或方案“内容”。

对于通过此方法提供的数据,Android Beam会尝试切换到交替传输(如蓝牙)以实现快速传输速度。 因此,此方法非常适合传输大型文件,如图片或歌曲。

接收侧将存储每个URI的在文件中的内容和呈现通知给用户,以打开一个文件Intent用行动ACTION_VIEW 如果发送多个URI,则Intent将引用第一个存储的文件。

此方法可能在onDestroy()之前的任何时间被调用,但是只有当指定的活动处于恢复(前台)状态时,URI才可用于Android Beam。 推荐的方法是在您的活动onCreate(Bundle)期间调用此方法 - 请参阅下面的示例代码。 此方法不会立即执行任何I / O或阻塞工作,因此可以安全地调用您的主线程。

setBeamPushUris(Uri[], Activity)setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback, Activity)优先于 setNdefPushMessage(NdefMessage, Activity, Activity...)setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)

如果 setBeamPushUris(Uri[], Activity)被称为用空乌里阵列,和/或 setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback, Activity)是带一个空的回调,那么开放的推将是特定活性(S)完全禁用。

代码示例:

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
     if (nfcAdapter == null) return;  // NFC not available on this device
     nfcAdapter.setBeamPushUris(new Uri[] {uri1, uri2}, this);
 }
And that is it. Only one call per activity is necessary. The Android OS will automatically release its references to the Uri(s) and the Activity object when it is destroyed if you follow this pattern.

如果您的Activity想要动态提供Uri,则使用 setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback, Activity)而不是使用此方法设置回调。

不要通过已经通过onDestroy()的活动。 如果您在onCreate(Bundle)期间调用此API,这是有保证的。

如果此设备不支持蓝牙或WiFI等替代传输,则调用此方法将不会执行任何操作。

需要 NFC权限。

Parameters
uris Uri: an array of Uri(s) to push over Android Beam
activity Activity: activity for which the Uri(s) will be pushed

setBeamPushUrisCallback

Added in API level 16
void setBeamPushUrisCallback (NfcAdapter.CreateBeamUrisCallback callback, 
                Activity activity)

设置一个回调,它将动态生成一个或多个使用Android Beam(TM)发送的Uri 回调提供的每个Uri必须具有方案“文件”或方案“内容”。

对于通过此回调提供的数据,Android Beam会尝试切换到交替传输(如蓝牙)以实现快速传输速度。 因此,此方法非常适合传输大型文件,如图片或歌曲。

接收端会将每个Uri的内容存储在一个文件中,并向用户显示一个通知,通过IntentACTION_VIEW来打开该文件。 如果发送多个URI,则Intent将引用第一个存储的文件。

此方法可能在onDestroy()之前的任何时间被调用,但只有在指定的活动处于恢复(前景)状态时,URI才可用于Android Beam。 推荐的方法是在您的活动onCreate(Bundle)期间调用此方法 - 请参阅下面的示例代码。 此方法不会立即执行任何I / O或阻塞工作,因此可以安全地调用您的主线程。

setBeamPushUris(Uri[], Activity)setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback, Activity)优先于 setNdefPushMessage(NdefMessage, Activity, Activity...)setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)

如果 setBeamPushUris(Uri[], Activity)被称为用空乌里阵列,和/或 setBeamPushUrisCallback(NfcAdapter.CreateBeamUrisCallback, Activity)是带一个空的回调,那么开放的推将是特定活性(S)完全禁用。

代码示例:

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
     if (nfcAdapter == null) return;  // NFC not available on this device
     nfcAdapter.setBeamPushUrisCallback(callback, this);
 }
And that is it. Only one call per activity is necessary. The Android OS will automatically release its references to the Uri(s) and the Activity object when it is destroyed if you follow this pattern.

不要传入已经通过onDestroy()的活动。 如果您在onCreate(Bundle)期间致电此API,这是有保证的。

如果此设备不支持蓝牙或WiFI等替代传输,则调用此方法将不会执行任何操作。

需要 NFC权限。

Parameters
callback NfcAdapter.CreateBeamUrisCallback: callback, or null to disable
activity Activity: activity for which the Uri(s) will be pushed

setNdefPushMessage

Added in API level 14
void setNdefPushMessage (NdefMessage message, 
                Activity activity, 
                Activity... activities)

设置一个静态 NdefMessage使用Android Beam(TM)发送。

可以在onDestroy()之前的任何时间调用此方法,但只有在指定的活动处于恢复(前台)状态时,NDEF消息才可用于NDEF推送。 推荐的方法是在您的活动onCreate(Bundle)期间调用此方法 - 请参阅下面的示例代码。 此方法不会立即执行任何I / O或阻塞工作,因此可以安全地调用您的主线程。

当前恢复的活动只能推送一条NDEF消息。 如果同时设置了setNdefPushMessage(NdefMessage, Activity, Activity...)setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...) ,则回调将优先。

如果 setNdefPushMessage(NdefMessage, Activity, Activity...)setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)调用,则Android操作系统可能会选择以您的名义发送默认NDEF消息,例如应用程序的URI。

如果setNdefPushMessage(NdefMessage, Activity, Activity...)被称为用空NDEF消息,和/或setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)是带一个空的回调,然后NDEF推送将成为指定的活动(多个)完全禁用。 这也会禁用Android操作系统为了这些活动而以其他名义发送的任何默认NDEF消息。

如果你想防止Android操作系统从发送结束默认NDEF消息(所有活动),您可以包括 <meta-data>内部元素 <application> AndroidManifest.xml档案的元素,就像这样:

 <application ...>
     <meta-data android:name="android.nfc.disable_beam_default"
         android:value="true" />
 </application>

API允许一次指定多个活动,但强烈建议一次只注册一个活动,并在活动onCreate(Bundle)期间进行onCreate(Bundle) 例如:

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
     if (nfcAdapter == null) return;  // NFC not available on this device
     nfcAdapter.setNdefPushMessage(ndefMessage, this);
 }
And that is it. Only one call per activity is necessary. The Android OS will automatically release its references to the NDEF message and the Activity object when it is destroyed if you follow this pattern.

如果您的活动想要动态生成NDEF消息,请使用 setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)而不是静态消息来设置回调。

不要通过已经通过onDestroy()的活动。 如果您在onCreate(Bundle)期间调用此API,这是有保证的。

要发送大型内容(如图片和歌曲),请考虑使用 setBeamPushUris(Uri[], Activity) ,它切换为交替传输(如蓝牙)以实现快速传输速率。

需要 NFC权限。

Parameters
message NdefMessage: NDEF message to push over NFC, or null to disable
activity Activity: activity for which the NDEF message will be pushed
activities Activity: optional additional activities, however we strongly recommend to only register one at a time, and to do so in that activity's onCreate(Bundle)

setNdefPushMessageCallback

Added in API level 14
void setNdefPushMessageCallback (NfcAdapter.CreateNdefMessageCallback callback, 
                Activity activity, 
                Activity... activities)

使用Android Beam(TM)设置一个动态生成NDEF消息的回调。

可以在onDestroy()之前的任何时间调用此方法,但只有在指定的活动处于恢复(前景)状态时才能进行NDEF消息回调。 推荐的方法是在您的活动onCreate(Bundle)期间调用此方法 - 请参阅下面的示例代码。 此方法不会立即执行任何I / O或阻塞工作,因此可以安全地调用您的主线程。

当前恢复的活动只能推送一条NDEF消息。 如果设置了setNdefPushMessage(NdefMessage, Activity, Activity...)setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...) ,则回调将优先。

如果您的活动都没有调用 setNdefPushMessage(NdefMessage, Activity, Activity...)setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...) ,则Android操作系统可能会选择以您的名义发送默认NDEF消息,例如应用程序的URI。

如果setNdefPushMessage(NdefMessage, Activity, Activity...)被称为用空NDEF消息,和/或setNdefPushMessageCallback(NfcAdapter.CreateNdefMessageCallback, Activity, Activity...)是带一个空的回调,然后NDEF推送将成为指定的活动(多个)完全禁用。 这也会禁用Android操作系统为了这些活动而以其他名义发送的任何默认NDEF消息。

如果你想防止Android操作系统从发送结束默认NDEF消息(所有活动),您可以包括 <meta-data>内部元素 <application> AndroidManifest.xml档案的元素,就像这样:

 <application ...>
     <meta-data android:name="android.nfc.disable_beam_default"
         android:value="true" />
 </application>

API允许一次指定多个活动,但强烈建议一次只注册一个活动,并在活动onCreate(Bundle)期间这样做。 例如:

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
     if (nfcAdapter == null) return;  // NFC not available on this device
     nfcAdapter.setNdefPushMessageCallback(callback, this);
 }
And that is it. Only one call per activity is necessary. The Android OS will automatically release its references to the callback and the Activity object when it is destroyed if you follow this pattern.

不要传入已经通过onDestroy()的活动。 如果您在onCreate(Bundle)期间调用此API,则可以保证这onCreate(Bundle)

要发送大型内容(如图片和歌曲),请考虑使用 setBeamPushUris(Uri[], Activity) ,它切换为交替传输(如蓝牙)以实现快速传输速率。

需要 NFC权限。

Parameters
callback NfcAdapter.CreateNdefMessageCallback: callback, or null to disable
activity Activity: activity for which the NDEF message will be pushed
activities Activity: optional additional activities, however we strongly recommend to only register one at a time, and to do so in that activity's onCreate(Bundle)

setOnNdefPushCompleteCallback

Added in API level 14
void setOnNdefPushCompleteCallback (NfcAdapter.OnNdefPushCompleteCallback callback, 
                Activity activity, 
                Activity... activities)

在成功的Android Beam(TM)上设置回调。

可以在onDestroy()之前的任何时间调用此方法,但只有在指定的活动处于恢复(前景)状态时才会发生回调。 推荐的方法是在您的活动onCreate(Bundle)期间调用此方法 - 请参阅下面的示例代码。 此方法不会立即执行任何I / O或阻塞工作,因此可以安全地调用您的主线程。

API允许一次指定多个活动,但强烈建议一次只注册一个活动,并在活动onCreate(Bundle)期间这样做。 例如:

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
     if (nfcAdapter == null) return;  // NFC not available on this device
     nfcAdapter.setOnNdefPushCompleteCallback(callback, this);
 }
And that is it. Only one call per activity is necessary. The Android OS will automatically release its references to the callback and the Activity object when it is destroyed if you follow this pattern.

不要传入已经通过onDestroy()的活动。 如果您在onCreate(Bundle)期间调用此API,这是有保证的。

需要 NFC权限。

Parameters
callback NfcAdapter.OnNdefPushCompleteCallback: callback, or null to disable
activity Activity: activity for which the NDEF message will be pushed
activities Activity: optional additional activities, however we strongly recommend to only register one at a time, and to do so in that activity's onCreate(Bundle)

Hooray!