我有一个具有 NFC 功能的真实设备。
它配备了一个预装的应用程序来读取和写入 RFID 标签,并且运行良好。
然而,当我尝试使用Android的NFC Api时,
NfcAdapter
始终是null
我通过
验证了 NFC 功能Activity activity = getActivity();
PackageManager pm = getContext().getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_NFC)) {
//This one is returned
Log.i(TAG, "Has NFC functionality");
} else {
Log.e(TAG, "Has No NFC functionality");
}
还测试了 Manager
NfcManager manager = (NfcManager) getContext().getSystemService(Context.NFC_SERVICE);
if (manager != null) {
//So the service is not null
Log.i(TAG, "NFC Manager working");
} else {
Log.e(TAG, "No NFC Manager working");
}
但是当我使用时
NfcAdapter nfc = manager.getDefaultAdapter();
它总是返回
null
。当上下文用作参数时,也会发生同样的情况。
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(context);
我使用了 Google 提供的 CardReader 示例,并按照 NFC 文档添加了更多测试,因此权限、意图过滤器和技术列表按照文档所述进行了定义。
我错过了什么?
我已经留下了样品附带的清单 我应该改变什么吗?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.cardreader"
android:versionCode="1"
android:versionName="1.0">
<!-- NFC Reader Mode was added in API 19. -->
<!-- Min/target SDK versions (<uses-sdk>) managed by build.gradle -->
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<application android:allowBackup="true"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- NFC-related intent filter. Allows application to handle messages from any
NFC-A devices discovered. Other Android devices are required to support NFC-A.
See: res/xml/nfc_tech_filter.xml -->
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
</application>
</manifest>
终于解决了,我怀疑没有可用的nfc适配器。
该设备来自一家公司,该公司似乎为 NFC 设备组装了自己的定制主板。空适配器可能是在android编译版本上故意造成的。
经过一番努力,我获得了预安装应用程序的示例源代码,它附带了本机库和编译的 jar,现在我可以以正确的方式处理界面。
我发现了很多这样的问题,有些回答根本不值得,即使源与官方 android 文档和示例相同,它们仍然会导致可能的错误代码使用,所以如果有人仍然有相同的问题有问题你可以按照这条路走。
PackageManager pm = getContext().getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_NFC)) {
//This one is returned
Log.i(TAG, "Has NFC functionality");
} else {
Log.e(TAG, "Has No NFC functionality");
}
NfcManager manager = (NfcManager) getContext().getSystemService(Context.NFC_SERVICE);
if (manager != null) {
NfcAdapter nfc = manager.getDefaultAdapter();
//So the service is not null
Log.i(TAG, "NFC Manager working");
} else {
Log.e(TAG, "No NFC Manager working");
}