Android 当nfc标记从4.4.4更新到5.1.1后已存在时,不再调用ontagDiscovery()

Android 当nfc标记从4.4.4更新到5.1.1后已存在时,不再调用ontagDiscovery(),android,nfc,android-5.0-lollipop,android-5.1.1-lollipop,Android,Nfc,Android 5.0 Lollipop,Android 5.1.1 Lollipop,当我启动NFCadapter时,我有一个代码能够检测到已经存在的NFC标记。这非常好,因为这意味着不需要移动标记来检测和读取它:) 因为我将三星手机从4.4.4升级到了5.1.1,所以这已经不起作用了。将标记移动到close contact时会触发OnTagDiscovery(),但以前会立即触发 顺便说一句,谷歌对NFC的改变不应该影响我的工作流程:只显示添加的方法。从21岁到22岁的变化似乎对nfc没有影响,对吗 这是我的电话: this.nfcAdapter.enableReaderMod

当我启动NFCadapter时,我有一个代码能够检测到已经存在的NFC标记。这非常好,因为这意味着不需要移动标记来检测和读取它:)

因为我将三星手机从4.4.4升级到了5.1.1,所以这已经不起作用了。将标记移动到close contact时会触发OnTagDiscovery(),但以前会立即触发

顺便说一句,谷歌对NFC的改变不应该影响我的工作流程:只显示添加的方法。从21岁到22岁的变化似乎对nfc没有影响,对吗

这是我的电话:

this.nfcAdapter.enableReaderMode(this.activity, this, NfcAdapter.FLAG_READER_NFC_A, Bundle.EMPTY);
你知道为什么这种行为会退化吗?有什么要做的提示吗

我计划在5.1.1中对其他设备进行测试,以检查它是否仅与三星相关或基于棒棒糖。找到这样的设备可能需要一些时间


谢谢

我今晚编写了一个修复程序,暂时解决了我的问题

您需要三星Knox许可证才能实施此修复(或者我想是root)。

与我以前的工作流程相比,该修复程序增加了2到4秒的时间来读取和检查卡上的密码,这非常重要。因此,这只是暂时的。我会及时更新一个更好的解决方案

我的代码和Fidesmo的代码都可以在4.4.4中按到手机上时检测标签,但在5.1.1中失败。有趣的是,如果您锁定/解锁手机,手机会检测到标签,并且两个应用程序(Fidesmo和我的)都会收到OnTagDiscoveryd回调。这来自于屏幕关闭时Android“关闭”NFC(我认为是出于安全原因)。从这一结构来看,解决办法显而易见:

修复方法:停止并启动NFC+设置接收器以收听NFC的开启/关闭。 执行您的实现以前所做的任何操作

        IntentFilter filter = new IntentFilter("android.nfc.action.ADAPTER_STATE_CHANGED");
        BroadcastReceiver receiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                Toast.makeText(Start.this, "broadcast received : "+ NfcAdapter.getDefaultAdapter(Start.this).isEnabled(), Toast.LENGTH_SHORT).show();
                // My code for communication with NFC Card :
                nfcCardApi= new nfcCardApi(Start.this);
                nfcCardApi2= new APICardNFC(nfcCardApi);
                APICardNFC.initForNFC(Start.this, nfcTypeCard);
                APICardNFC.startWaitingCard();
                tvInfo.setText(getResources().getString(R.string.login_pass_card));
            }
        };
        registerReceiver(receiver, filter);

        // restart NFC to try to grab the tag :
        disableEnableNFC();
和禁用blenablenfc():


我今晚编了一个补丁,暂时解决了我的问题

您需要三星Knox许可证才能实施此修复(或者我想是root)。

与我以前的工作流程相比,该修复程序增加了2到4秒的时间来读取和检查卡上的密码,这非常重要。因此,这只是暂时的。我会及时更新一个更好的解决方案

我的代码和Fidesmo的代码都可以在4.4.4中按到手机上时检测标签,但在5.1.1中失败。有趣的是,如果您锁定/解锁手机,手机会检测到标签,并且两个应用程序(Fidesmo和我的)都会收到OnTagDiscoveryd回调。这来自于屏幕关闭时Android“关闭”NFC(我认为是出于安全原因)。从这一结构来看,解决办法显而易见:

修复方法:停止并启动NFC+设置接收器以收听NFC的开启/关闭。 执行您的实现以前所做的任何操作

        IntentFilter filter = new IntentFilter("android.nfc.action.ADAPTER_STATE_CHANGED");
        BroadcastReceiver receiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                Toast.makeText(Start.this, "broadcast received : "+ NfcAdapter.getDefaultAdapter(Start.this).isEnabled(), Toast.LENGTH_SHORT).show();
                // My code for communication with NFC Card :
                nfcCardApi= new nfcCardApi(Start.this);
                nfcCardApi2= new APICardNFC(nfcCardApi);
                APICardNFC.initForNFC(Start.this, nfcTypeCard);
                APICardNFC.startWaitingCard();
                tvInfo.setText(getResources().getString(R.string.login_pass_card));
            }
        };
        registerReceiver(receiver, filter);

        // restart NFC to try to grab the tag :
        disableEnableNFC();
和禁用blenablenfc():


我最近在一些三星设备上遇到了NFC问题。这可能是棒棒糖的问题。尝试Play store中的一个应用程序,如NFC Tools,看看它的行为是否相同。好主意,我尝试过,但NFC Tools无法读取已经接近手机的标签,它需要你“接近NFC标签”来检测它。因此,这无助于我解决我的问题:(你能支持我的问题吗,我想我需要一些可见性:/我不能说为什么在5.1.1中,在4.4.4中曾经有效的东西停止了工作,但我可以向你指出一个解决这个问题的开源库,这样你就可以检查他们是如何做到的:这是一个不必用标签重新点击手机的类:这承诺很多,您或/和您的团队很好地实现了这一点!问题:“从最终用户的角度来看,此类课程允许最终用户*向手机展示他们的设备一次,并在*在不同活动之间切换时将其保留在手机上。”它是否包括以下行为:如果设备(标签)当应用程序启动时,标签已经存在,可以使用(无需移动)?您好,我在4.4.4设备和5.1.1设备上部署了您的测试应用程序HelloFidesmo。事实上,您在4.4.4上的测试应用程序能够读取已经存在的标记。但它与我在5.1.1设备上的读取一样失败。当您说“解决问题的开源库”时,您指的是哪个问题?我最近在一些三星设备上遇到了NFC问题。这可能是棒棒糖的问题。请尝试Play store中的应用程序,如NFC Tools,看看它的行为是否相同。好主意,我尝试过,但NFC Tools无法读取手机上已经接近的标签,它需要你“接近NFC标签”检测它。所以它不能帮助我解决我的问题:(你能支持我的问题吗,我想我需要一些可见性:/我不能说为什么在5.1.1中,在4.4.4中曾经有效的东西停止了工作,但我可以向你指出一个解决这个问题的开源库,这样你就可以检查他们是如何做到的:这是一个不必用标签重新点击手机的类:这承诺很多,您或/和您的团队很好地实现了这一点!问题:“从最终用户的角度来看,此类课程允许最终用户*向手机展示他们的设备一次,并在*在不同活动之间切换时将其保留在手机上。”它是否包括以下行为:如果设备(标签)当应用程序启动时,标签已经存在,可以使用(无需移动)?您好,我在4.4.4设备和5.1.1设备上部署了您的测试应用程序HelloFidesmo。事实上,您在4.4.4上的测试应用程序能够读取已经存在的标记。但它与我在5.1.1设备上的读取一样失败。当您说“解决问题的开源库”时,您指的是哪个问题?