NfcManager可用,但NfcAdapter总是空

时间:2017-12-19 23:18:34

标签: android nfc rfid

我有一个具有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");
}

还测试了经理

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文档添加了更多测试,因此文档说明了权限,intent-filters和技术列表。

我错过了什么?

我已经留下了样本附带的清单 我应该改变什么吗?

<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>

1 个答案:

答案 0 :(得分:0)

最后解决了它,因为我怀疑没有可用的nfc适配器。

该设备来自一家似乎为nfc设备组装自己的定制主板的公司。 null适配器可能是故意在android编译版本上引起的。

经过大量的努力,我得到了预装应用程序的示例源代码,它带有本机库和编译的jar,现在我可以正确的方式处理接口。

我发现了很多像这样的问题,有些回复根本不值得,即使源代码与官方的android文档和示例相同,它们也会导致错误的代码使用,所以如果有人仍然有同样的问题,你可以遵循这条道路。

  1. 通过
  2. 验证功能的可用性


    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");
    }
    
    1. 验证NfcManager的可用性

    2. 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");
      }
      
      1. 检查库/本机实现

      2. 如果avobe步骤失败,请使用示例应用程序测试是否存在自定义适配器实现 使用dex2jar获取演示源,检查所使用的.so和.jar库,以及是否存在本机代码实现。
        那么你应该尽可能获得源代码示例,我无法获得反编译版本所需的.jar。