# @ohos.nfc.controller (Standard NFC)
The **nfcController** module provides APIs for opening and closing Near-Field Communication (NFC) and reading the NFC state.
> **NOTE**
>
> The initial APIs of this module are supported since API version 7. Newly added APIs will be marked with a superscript to indicate their earliest API version.
## **Modules to Import**
```js
import { nfcController } from '@kit.ConnectivityKit';
```
## NfcState
Enumerates the NFC states.
**System capability**: SystemCapability.Communication.NFC.Core
**Atomic service API**: This API can be used in atomic services since API version 12.
| Name| Value| Description|
| -------- | -------- | -------- |
| STATE_OFF | 1 | NFC is closed (OFF).|
| STATE_TURNING_ON | 2 | NFC is turning on.|
| STATE_ON | 3 | NFC is open (ON).|
| STATE_TURNING_OFF | 4 | NFC is turning off.|
## nfcController.isNfcAvailable(deprecated)
isNfcAvailable(): boolean
Checks whether the device supports NFC.
> **NOTE**
> This API is supported since API version 7 and deprecated since API version 9. Use [canIUse("SystemCapability.Communication.NFC.Core")](../common/init.md#caniuse) instead.
**System capability**: SystemCapability.Communication.NFC.Core
**Return value**
| **Type**| **Description**|
| -------- | -------- |
| boolean | Returns **true** if the device supports NFC; returns **false** otherwise.|
## nfcController.openNfc(deprecated)
openNfc(): boolean
Opens NFC.
> **NOTE**
> This API is supported since API version 7 and deprecated since API version 9. Use [enableNfc](#nfccontrollerenablenfc9) instead.
**Required permissions**: ohos.permission.MANAGE_SECURE_SETTINGS (available only for system applications)
**System capability**: SystemCapability.Communication.NFC.Core
**Return value**
| **Type**| **Description**|
| -------- | -------- |
| boolean | Returns **true** if the operation is successful; returns **false** otherwise.|
## nfcController.enableNfc9+
enableNfc(): void
Enables NFC. This API can be called only by system applications.
**Required permissions**: ohos.permission.MANAGE_SECURE_SETTINGS (available only for system applications)
**System capability**: SystemCapability.Communication.NFC.Core
**Error codes**
For details about the error codes, see [NFC Error Codes](errorcode-nfc.md).
| ID| Error Message|
| ------- | -------|
|201 | Permission denied. |
|801 | Capability not supported. |
| 3100101 | NFC state is abnormal in service. |
## nfcController.closeNfc(deprecated)
closeNfc(): boolean
Closes NFC.
> **NOTE**
> This API is supported since API version 7 and deprecated since API version 9. Use [disableNfc](#nfccontrollerdisablenfc9) instead.
**Required permissions**: ohos.permission.MANAGE_SECURE_SETTINGS (available only for system applications)
**System capability**: SystemCapability.Communication.NFC.Core
**Return value**
| **Type**| **Description** |
| -------- | ------------------------------------------- |
| boolean | Returns **true** if the operation is successful; returns **false** otherwise.|
## nfcController.disableNfc9+
disableNfc(): void
Disables NFC. This API can be called only by system applications.
**Required permissions**: ohos.permission.MANAGE_SECURE_SETTINGS (available only for system applications)
**System capability**: SystemCapability.Communication.NFC.Core
**Error codes**
For details about the error codes, see [NFC Error Codes](errorcode-nfc.md).
| ID| Error Message|
| ------- | -------|
|201 | Permission denied. |
|801 | Capability not supported. |
| 3100101 | NFC state is abnormal in service. |
## nfcController.isNfcOpen
isNfcOpen(): boolean
Checks whether NFC is open.
**System capability**: SystemCapability.Communication.NFC.Core
**Atomic service API**: This API can be used in atomic services since API version 12.
**Return value**
| **Type**| **Description** |
| -------- | ----------------------------------- |
| boolean | Returns **true** if NFC is open; returns **false** otherwise.|
## nfcController.getNfcState
getNfcState(): [NfcState](#nfcstate)
Obtains the NFC state.
**System capability**: SystemCapability.Communication.NFC.Core
**Atomic service API**: This API can be used in atomic services since API version 12.
**Return value**
| **Type**| **Description** |
| -------- | ---------------------- |
| [NfcState](#nfcstate) | NFC state obtained. For details, see [NfcState](#nfcstate).|
## nfcController.on('nfcStateChange')
on(type: 'nfcStateChange', callback: Callback<[NfcState](#nfcstate)>): void
Subscribes to NFC state changes. A callback will be invoked to return the NFC state when the NFC state changes.
**System capability**: SystemCapability.Communication.NFC.Core
**Atomic service API**: This API can be used in atomic services since API version 12.
**Parameters**
| **Name**| **Type**| **Mandatory**| **Description**|
| -------- | -------- | -------- | -------- |
| type | string | Yes| Event type. The value is **nfcStateChange**.|
| callback | Callback<[NfcState](#nfcstate)> | Yes| Callback used to return the NFC state.|
## nfcController.off('nfcStateChange')
off(type: 'nfcStateChange', callback?: Callback<[NfcState](#nfcstate)>): void
Unsubscribes from the NFC state changes. The subscriber will not receive NFC state change notifications.
**System capability**: SystemCapability.Communication.NFC.Core
**Atomic service API**: This API can be used in atomic services since API version 12.
**Parameters**
| **Name**| **Type**| **Mandatory**| **Description**|
| -------- | -------- | -------- | -------- |
| type | string | Yes| Event type. The value is **nfcStateChange**.|
| callback | Callback<[NfcState](#nfcstate)> | No| Callback for the NFC state changes. This parameter can be left blank. If this parameter is not specified, all callbacks associated with the specified event will be unregistered.|
**Example**
```js
import { nfcController } from '@kit.ConnectivityKit';
// Register a callback to receive the NFC state change notification.
nfcController.on("nfcStateChange", (nfcState : number)=> {
console.log("nfcController on callback nfcState: " + nfcState);
});
// Open NFC. The caller must have the ohos.permission.MANAGE_SECURE_SETTINGS permission. This permission is available only for system applications.
if (!nfcController.isNfcOpen()) {
// Use 'enableNfc' to enable NFC since API version 9.
try {
nfcController.enableNfc();
console.log("nfcController enableNfc success");
} catch (businessError) {
console.error("nfcController enableNfc businessError: " + businessError);
}
} else {
console.log("nfcController NFC has been opened");
}
// Close NFC. The caller must have the ohos.permission.MANAGE_SECURE_SETTINGS permission. This permission is available only for applications.
if (nfcController.isNfcOpen()) {
// Use 'disableNfc' to disable NFC since API version 9.
try {
nfcController.disableNfc();
console.log("nfcController disableNfc success");
} catch (businessError) {
console.error("nfcController disableNfc businessError: " + businessError);
}
} else {
console.log("nfcController NFC has been closed");
}
// Unregister the callback.
nfcController.off("nfcStateChange");
```