在Samsung Galaxy设备上隐藏“NFC标记类型不受支持”错误

时间:2016-03-10 01:42:46

标签: android nfc samsung-mobile galaxy mifare

我正在开发一款只扫描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对象。

1 个答案:

答案 0 :(得分:4)

在Android 4.4之前

您尝试做的事情根本不可能来自应用程序(至少不能在非root用户/未经修改的设备上)。消息"不支持NFC标签类型"由Android系统(或更具体地说是NFC系统服务)显示,而不是将标签分发到您的应用程序。这意味着NFC系统服务会过滤MIFARE Classic标签,并且永远不会通知任何应用程序。因此,您的应用无法检测到MIFARE Classic标记或绕过该弹出消息。

在root设备上,您可以使用

绕过邮件
  1. 用于修改NFC服务的行为,或
  2. 系统分区上的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> 部分内)。

  3. 因为,你也要求Galaxy S6(question that you linked):我在S4上测试了这个方法。我还没有验证这是否仍然适用于最新固件或其他设备(例如S6)。

    自Android 4.4

    以来

    这是纯粹的猜测,但 according to this (链接不再可用),似乎某些应用程序(例如NXP TagInfo) 能够检测到MIFARE Android 4.4以来受影响的三星设备上的经典标签。这可能意味着前台应用程序能够使用读取器模式API(see NfcAdapter.enableReaderMode)绕过该弹出窗口,可能与NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK结合使用。