如何在安卓系统中检查NFC是否已启用?

36

我该如何在程序中检查NFC功能是否已启用?有没有办法从我的程序中启用设备上的NFC?请帮帮我。

5个回答

66
NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE);
NfcAdapter adapter = manager.getDefaultAdapter();
if (adapter != null && adapter.isEnabled()) {
    // adapter exists and is enabled.
}

你无法通过编程方式启用NFC。用户必须手动通过设置或硬件按钮启用它。


如果返回值为FALSE,则意味着该设备没有NFC功能,这是正确的吗@userSeven7s? - gumuruh
1
这不是正确的。如果适配器为空,则设备没有NFC。请在开发者网站上查看说明。 - Marko

15

您可以简单地使用以下代码来完成:

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);

if (nfcAdapter == null) {
    // NFC is not available for device
} else if (!nfcAdapter.isEnabled()) {
    // NFC is available for device but not enabled
} else {
    // NFC is enabled
}

请记住,用户可以在使用您的应用时关闭NFC。

来源:https://developer.android.com/guide/topics/connectivity/nfc/nfc#manifest

尽管您无法以编程方式自行启用NFC,但可以通过添加一个按钮来打开NFC设置并要求用户启用它:

Intent intent
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    intent = new Intent(Settings.ACTION_NFC_SETTINGS);
} else {
    Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
}

startActivity(intent);

这是一个更完整的答案,包括如何引导用户进入NFC设置。谢谢。 - alierdogan7

9

我可能有点晚了,但我已经实现了一个带有检测功能的“完成”示例,包括:

  1. NFC功能(硬件)
  2. NFC初始状态(在设置中启用或禁用)
  3. 状态更改

我还添加了一个相应的Beam 示例,它使用了

nfcAdapter.isNdefPushEnabled()

这是在后期Android版本中引入的一种方法,用于检测像2)和3)中那样的beam状态。


1
你能否更新你的回答,因为Google Code已经关闭了。 - Yahya Uddin
1
Android Beam不再受支持。 - Shadow

8

使用PackageManagerhasSystemFeature("android.hardware.nfc"),匹配您在清单文件中应该有的<uses-feature android:name="android.hardware.nfc" android:required="false" />元素。

自2.3.3以来,您还可以使用NfcAdapter.getDefaultAdapter()获取适配器(如果可用),并调用其isEnabled()方法检查NFC当前是否已打开。


0
mNfcAdapter = NfcAdapter.getDefaultAdapter(this.getApplicationContext());
    try {
        if (mNfcAdapter != null) {
            result = true;
        }
    }

我们可以使用上下文和NfcAdapter进行验证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接