web-dev-qa-db-fra.com

Masquer l'erreur "Type de balise NFC non pris en charge" sur les appareils Samsung Galaxy

Je travaille sur une application qui scanne uniquement l'UID des cartes MIFARE Classic pour faciliter l'enregistrement des présences. Je l'ai fait fonctionner. Cependant, chaque fois que je numérise une carte sur mon Galaxy S4, je reçois un toast indiquant "Type de tag NFC non pris en charge".

Je souhaite bloquer ou masquer ce message lorsque l'application est ouverte.

J'ai remarqué qu'il y avait ne autre question demandant la même chose sur un Galaxy S6 mais il a été rejeté une fois, puis ignoré.

J'ai trouvé cette conversation sur le forum des développeurs Samsung, mais je n'ai pas pu extraire de réponse de ce qui y est écrit:

  if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
      myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
      tagID = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
      alertDialog.dismiss(); 

Il me semble que la section alertDialog.dismiss() est ce dont j'ai besoin mais il n'y a aucune explication d'où ils ont obtenu l'objet alertDialog.

6
Duncan Tyrell

Avant Android 4.4

Ce que vous essayez de faire n'est tout simplement pas possible à partir d'une application (du moins pas sur un appareil non rooté/non modifié). Le message "Type de balise NFC non pris en charge" est affiché par le Android (ou plus précisément le service système NFC système)) avant et au lieu d'envoyer la balise à votre application. Cela signifie que le service système NFC filtre les balises MIFARE Classic et n'en avertit jamais aucune application. Par conséquent, votre application ne peut pas détecter les balises MIFARE Classic ni contourner ce message contextuel.

Sur un appareil rooté, vous pourrez peut-être contourner le message en utilisant

  1. Xposée à modifier le comportement du service NFC, ou
  2. les fichiers de configuration de la fonction CSC (Consumer Software Customization) sur la partition système (voir/system/csc /. Le service système NFC) désactive la fenêtre contextuelle et envoie les balises MIFARE Classic aux applications si la fonction CSC <CscFeature_NFC_EnableSecurityPromptPopup> est défini sur n'importe quelle valeur sauf "mifareclassic" ou "all". Par exemple, vous pouvez utiliser:

    <CscFeature_NFC_EnableSecurityPromptPopup>NONE</CscFeature_NFC_EnableSecurityPromptPopup>
    

    Vous pouvez ajouter cette entrée, par exemple, au fichier "/system/csc/others.xml" (dans la section <FeatureSet> ... </FeatureSet> qui existe déjà dans ce fichier).

Depuis, vous avez également demandé le Galaxy S6 (la question que vous avez liée ): j'ai testé cette méthode sur le S4 lors de sa sortie. Je n'ai pas vérifié si cela fonctionne toujours dans le dernier firmware ou sur d'autres appareils (par exemple le S6).

Depuis Android 4.4

C'est une pure supposition, mais selon cela (lien plus disponible), il semble que certaines applications (par exemple NXP TagInfo) sont capables de détecter les balises MIFARE Classic sur les appareils Samsung concernés depuis Android 4.4. Cela pourrait signifier que les applications de premier plan peuvent contourner cette fenêtre contextuelle à l'aide de l'API en mode lecteur ( voir NfcAdapter.enableReaderMode ) éventuellement en combinaison avec NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK .

4
Michael Roland