NfcAdapter.getDefaultAdapter(this)返回null但NFC工作

时间:2016-06-06 15:09:17

标签: android null nfc

我的应用在背景和前景上使用NFC阅读。对于用户信息,我在我的活动和方法onTick(长l)中使用CountDownTimer(120 * 1000,5 * 1000)来检查每5秒的NFC状态。有时(在Android 4.2.2上,我的客户说,它永远不会发生在我身上)NfcAdapter.getDefaultAdapter(BaseActivity.this)返回null但背景和前景NFC读取仍然有效!关闭和打开没有帮助。重新安装帮助。

BG通过清单阅读:

<activity
            android:name=".activity.NfcReaderActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait">

            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http" />
                <data android:scheme="https" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

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

通过意图阅读FG:

IntentFilter ndef = new IntentFilter();
ndef.addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
ndef.addCategory(Intent.CATEGORY_DEFAULT);

try {
    ndef.addDataType("*/*");
} catch (IntentFilter.MalformedMimeTypeException e) {
    throw new RuntimeException("fail", e);
}

mNfcAdapter = NfcAdapter.getDefaultAdapter(this.mActivity);
mNfcPendingIntent = PendingIntent.getActivity(
        this.mActivity, 0,
        new Intent(this.mActivity, this.mActivity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),
        0
);
mNfcFilters = new IntentFilter[] {
        ndef
};
mNfcTechLists = new String[][] { new String[] {
        // White solid cards
        NfcA.class.getName()
} };

if (mNfcAdapter != null) {
    mNfcAdapter.enableForegroundDispatch(
            mActivity,
            mNfcPendingIntent,
            mNfcFilters,
            mNfcTechLists
    );
}

看起来NfcAdapter有库存或冻结。有没有人有同样的经历?问题出在哪里?

经过一些测试后,我有了新的观察结果。这只在重启后发生。我虽然我的应用程序启动了两次,并且存在一些线程死锁,但事实并非如此。如果我启动CountDownTimer(在onCreate方法中调用)有一些延迟(3秒或更长时间),它可以工作,getDefaultAdapter非空。如果启动延迟太低(2秒或更短),我在日志中发现此消息:“E / NFC:无法检索NFC服务”,然后getDefaultAdapter返回null,直到我重新安装我的应用程序。

在执行CountDownTimer之前这么短的延迟(也许更好的是Timer.schedule(...,延迟,间隔))是临时解决方案,但如果有人知道什么是最好的解决方案,请告诉我。

1 个答案:

答案 0 :(得分:0)

可能它是在模拟器上使用的,在模拟器上你无法使用NFC做任何事情。