NFC堆栈停止寻找新标签

时间:2018-11-07 09:43:35

标签: android nfc samsung-mobile

我实际上是在开发一个具有必须处理NFC标签以使用户能够使用此应用程序的活动的应用程序。

启动该应用程序并在其恢复时调用此活动。

大多数情况下,这种方法都可以正常工作,但手机(Samsung galaxy xcover 4)有时会停止寻找新的NFC标签,甚至无法在检测到声音时播放声音。

当此错误附加后,我尝试使用Play商店中的另一个应用程序来处理NFC标签,但没有任何反应。

这是我的检测活动:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    nfcAdapter = NfcAdapter.getDefaultAdapter(this);

    if (nfcAdapter == null || !nfcAdapter.isEnabled())
    {
        finish();
        return;
    }

    final Intent intent = new Intent(this.getApplicationContext(), this.getClass());
    final PendingIntent pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent, 0);

    //method to handle your intent
    handleTag(getIntent());
}

@Override
public void onResume()
{
    super.onResume();

    final Intent intent = new Intent(this.getApplicationContext(), this.getClass());
    final PendingIntent pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent, 0);
    nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}

@Override
protected void onPause()
{
    super.onPause();
    nfcAdapter.disableForegroundDispatch(this);
}

@Override
protected void onNewIntent(Intent intent)
{
    super.onNewIntent(intent);

    handleTag(intent);

    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
}

private void handleTag(final Intent intent)
{
    String action = intent.getAction();
    final Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action))
    {
        try
        {
            Class isoDep = Class.forName("android.nfc.tech.IsoDep");
            Method isoDep_get = isoDep.getDeclaredMethod("get", Tag.class);

            final IsoDep techIsoDep = (IsoDep) isoDep_get.invoke(null, tag);

            if (techIsoDep != null)
            {
                // --- Tag detected
            }
        }
        catch (Exception e)
        {
            Log.e(TAG, "Exception while processing IsoPcdA object", e);
        }
    }
}

编辑: 我注意到,这是因为即使屏幕没有变黑,CPU或NFC阅读器进入睡眠模式,我也必须锁定和解锁手机才能使其再次工作,我现在正在寻找我一直尝试过的使cpu一直运行的方法:

仅适用于Galaxy Xcover 3(Android 6.0.1)

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Tag");
wl.acquire();

我仍然无法使其在Galaxy Xcover 4(Android 8.1)上运行

尝试过:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

但是也没用。

1 个答案:

答案 0 :(得分:0)

当您在Android Studio中使用调试模式并且手机丢失标签时,可能会发生这种情况。关闭NFC并将其重新打开时,手机将无法再检测到其他标签。 我没有读过您的代码,因为您说过其他应用程序也是如此。 只需尝试在手机中关闭并打开NFC。