我正在开发一款仅扫描 MIFARE Classic 卡的 UID 的应用程序,以方便考勤登记。我已经让它工作了。然而,每次我在 Galaxy S4 上扫描卡时,都会收到一条提示“不支持 NFC 标签类型”。
我想在应用程序打开时阻止或隐藏该消息。
我注意到有还有一个问题在 Galaxy S6 上提出同样的要求,但被否决了一次,然后就被忽略了。
I found 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
对象来自.
Android 4.4之前
您尝试做的事情根本不可能从应用程序中实现(至少在未root/未修改的设备上)。 Android 系统(或更具体地说,NFC 系统服务)会在将标签分派到您的应用程序之前显示消息“不支持 NFC 标签类型”。这意味着 NFC 系统服务会过滤 MIFARE Classic 标签,并且从不通知任何应用程序有关它们的信息。因此,您的应用程序无法检测 MIFARE Classic 标签或规避该弹出消息。
在获得 root 权限的设备上,您可以使用以下任一方法绕过该消息
- Xpose 修改 NFC 服务的行为,或者
-
系统分区上的 CSC(消费者软件定制)功能配置文件(请参阅 /system/csc/。如果 CSC 功能有效,NFC 系统服务将禁用弹出窗口并将 MIFARE Classic 标签分派给应用程序<CscFeature_NFC_EnableSecurityPromptPopup>
设置为除“mifareclassic”或“all”之外的任何值。例如,您可以使用:
<CscFeature_NFC_EnableSecurityPromptPopup>NONE</CscFeature_NFC_EnableSecurityPromptPopup>
例如,您可以将此条目添加到文件“/system/csc/others.xml”(在<FeatureSet> ... </FeatureSet>
该文件中已存在)。
既然您想要 Galaxy S6(您链接的问题)还有:这个方法刚出来的时候我就在S4上测试过。我尚未验证这是否仍然适用于最新固件或其他设备(例如 S6)。
从安卓4.4开始
This is pure guessing, but according to this (link no longer available), it seems that some apps (e.g. NXP TagInfo) are capable of detecting MIFARE Classic tags on affected Samsung devices since Android 4.4. This might mean that foreground apps are capable of bypassing that popup using the reader-mode API (see NfcAdapter.enableReaderMode) possibly in combination with NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)