我正在开发一款只扫描MIFARE Classic卡的UID的应用程序,以方便出勤登记。我有它的工作。但是,每当我在Galaxy S4上扫描一张卡片时,我都会举杯祝贺“不支持NFC标签类型”。
我想在应用程序打开时阻止或隐藏该消息。
我注意到有one other question在Galaxy S6上要求同样的事情,但它被拒绝了一次然后被忽略了。
我在三星开发者论坛上发现了this对话,但是,我无法从那里写的内容中找到答案:
if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
tagID = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
alertDialog.dismiss();
看起来alertDialog.dismiss()
部分是我需要的部分,但没有解释他们从哪里得到alertDialog
对象。
答案 0 :(得分:4)
您尝试做的事情根本不可能来自应用程序(至少不能在非root用户/未经修改的设备上)。消息"不支持NFC标签类型"由Android系统(或更具体地说是NFC系统服务)显示,而不是将标签分发到您的应用程序。这意味着NFC系统服务会过滤MIFARE Classic标签,并且永远不会通知任何应用程序。因此,您的应用无法检测到MIFARE Classic标记或绕过该弹出消息。
在root设备上,您可以使用
绕过邮件系统分区上的CSC(消费者软件自定义)功能配置文件(请参阅/ system / csc /。如果CSC功能{{1},NFC系统服务将禁用弹出窗口并将MIFARE Classic标签分发给应用程序}被设置为任何值但是" mifareclassic"或" all"。例如,您可以使用:
<CscFeature_NFC_EnableSecurityPromptPopup>
您可以将此条目添加到例如文件&#34; /system/csc/others.xml" (在该文件中已存在的<CscFeature_NFC_EnableSecurityPromptPopup>NONE</CscFeature_NFC_EnableSecurityPromptPopup>
部分内)。
因为,你也要求Galaxy S6(question that you linked):我在S4上测试了这个方法。我还没有验证这是否仍然适用于最新固件或其他设备(例如S6)。
这是纯粹的猜测,但 according to this (链接不再可用),似乎某些应用程序(例如NXP TagInfo) 能够检测到MIFARE Android 4.4以来受影响的三星设备上的经典标签。这可能意味着前台应用程序能够使用读取器模式API(see NfcAdapter.enableReaderMode
)绕过该弹出窗口,可能与NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK
结合使用。