Autore Topic: Dopo la lettura apre l'applicazione "TAG"  (Letto 2887 volte)

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Dopo la lettura apre l'applicazione "TAG"
« il: 17 Aprile 2013, 12:48:14 CEST »
0
Salve a tutti,
ho creato un codice di prova per testare l'NFC ma ho un problema: dopo che il tag è stato letto non viene stampato sul Log Cat il tag letto ma bensì si apre un istanza dell'applicazione "Tag" che c'è già sul cell.. come mai?

Questo è il mio codice:
Codice (Java): [Seleziona]
public class MainActivity extends Activity {
        Tag mytag;
        NfcAdapter adapter;
        PendingIntent pendingIntent;
        IntentFilter writeTagFilters[];
        String[][] techListsArray;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
               
                adapter = NfcAdapter.getDefaultAdapter(this);
               
               
                pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
                IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
                try {
                        tagDetected.addDataType("*/*");    /* Handles all MIME based dispatches.
                                               You should specify only the ones that you need. */

            }
            catch (MalformedMimeTypeException e) {
                throw new RuntimeException("fail", e);
            }
                tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
                writeTagFilters = new IntentFilter[] { tagDetected };
               
                techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }
       
        @Override
        protected void onNewIntent(Intent intent){
                if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){
                        mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);    
                        Log.d("test", mytag.toString());
                }
        }
       
        public void onPause() {
            super.onPause();
            adapter.disableForegroundDispatch(this);
        }

        public void onResume() {
            super.onResume();
            adapter.enableForegroundDispatch(this, pendingIntent, writeTagFilters, techListsArray);
        }


}

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Dopo la lettura apre l'applicazione "TAG"
« Risposta #1 il: 17 Aprile 2013, 13:25:56 CEST »
0
evidentemente il tag che passi non risponde all'intent che hai registrato, più probabile risponda all'intent TECH_DISCOVERED
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Dopo la lettura apre l\'applicazione \"TAG\"
« Risposta #2 il: 17 Aprile 2013, 14:00:27 CEST »
0
ho provato a sostituire con
Codice (Java): [Seleziona]
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
ma niente, risponde sempre l'applicazione "Tag" dicendo "tipo tag sconosciuto"

:(

Post unito: 17 Aprile 2013, 14:07:15 CEST
nel Cat log leggo questo:

Codice: [Seleziona]
04-17 14:04:42.579: E/NfcService(291): No tag fallback activity found for Intent { act=android.nfc.action.TAG_DISCOVERED flg=0x10000000 (has extras) }
il tag è di tipo ISO15693
« Ultima modifica: 17 Aprile 2013, 14:07:15 CEST da napalm, Reason: Merged DoublePost »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Dopo la lettura apre l'applicazione "TAG"
« Risposta #3 il: 17 Aprile 2013, 14:12:10 CEST »
0
Codice (Java): [Seleziona]
techListsArray = new String[][] { new String[] { NfcF.class.getName() } };non ricordo cosa si doveva passare (mi pare null dentro l'array interno) per non forzare la tecnologia. Può essere che il tag che usi non è NFCF
mi pare che l'iso... sia NFCV
« Ultima modifica: 17 Aprile 2013, 14:21:57 CEST da Nicola_D »
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Dopo la lettura apre l\'applicazione \"TAG\"
« Risposta #4 il: 17 Aprile 2013, 14:42:05 CEST »
0
Grazie, ci siamo quasi allora:

Codice (Java): [Seleziona]
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
come filtro

Codice (Java): [Seleziona]
techListsArray = new String[][] { new String[] { NfcV.class.getName() } };
perchè l'ISO15693 è NfcV

poi nell'onNewIntent

Codice (Java): [Seleziona]
@Override
        protected void onNewIntent(Intent intent){
                Log.d("TEst", "PASSO");
                Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_ID);
                NfcV nfcv = NfcV.get(tag);
                if (nfcv != null) {
                        Log.d("TEst", "PASSO 2");
                }
        }

ora vedo le due stampe "PASSO" e "PASSO 2" senza che si apra l'altra applicazione.

Il problema però è come arrivare ad avere il serial number del tag visto che nessun metodo sull'oggetto "nfcv " mi ritorna una array di byte da tradurre poi in HEX e poi in stringa

Post unito: 17 Aprile 2013, 15:06:14 CEST
RISOLTO:

mi incaponivo sull'oggetto NfcV invece dovevo andare sull'oggetto Tag

Codice (Java): [Seleziona]
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
                NfcV nfcv = NfcV.get(tag);
                if (nfcv != null) {
                        Log.d("TEst", "PASSO 2");
                        byte[] id = tag.getId();
                        Log.d("TAG CODE: ", bytesToHex(id));
                }

Codice (Java): [Seleziona]
public static String bytesToHex(byte[] bytes) {
            final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
            char[] hexChars = new char[bytes.length * 2];
            int v;
            String esatta = "";
            for ( int j = 0; j < bytes.length; j++ ) {
                v = bytes[j] & 0xFF;
                hexChars[j * 2] = hexArray[v >>> 4];
                hexChars[j * 2 + 1] = hexArray[v & 0x0F];
                String test = hexArray[v >>> 4]+""+hexArray[v & 0x0F];
                esatta = test + "" + esatta;
            }
            return esatta;
        }
       

modificata la bytesToHex perchè mi dava il tag code al contrario
« Ultima modifica: 17 Aprile 2013, 15:06:14 CEST da napalm, Reason: Merged DoublePost »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Dopo la lettura apre l'applicazione "TAG"
« Risposta #5 il: 17 Aprile 2013, 17:22:53 CEST »
0
si, forse non ti serve neanche fare nfcv.get visto che l'id fa parte della classe tag, e se arrivi li, vuol dire che il filtro ha già filtrato sulle tecnologie...

eh si, gli iso15693 ti danno l'id al contrario, ci sono passato pure io....
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Dopo la lettura apre l'applicazione "TAG"
« Risposta #6 il: 18 Aprile 2013, 08:53:48 CEST »
0
Domanda: ma io in ogni activity che ho devo mettere tutto stò codice per far in modo che la mia app legga i tag e non ne apra un'latra o c'è un modo più veloce?

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Dopo la lettura apre l'applicazione "TAG"
« Risposta #7 il: 18 Aprile 2013, 09:06:58 CEST »
0
Domanda: ma io in ogni activity che ho devo mettere tutto stò codice per far in modo che la mia app legga i tag e non ne apra un'latra o c'è un modo più veloce?
puoi farlo in un'activity che poi erediti in tutte le tue altre activity....
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Dopo la lettura apre l'applicazione "TAG"
« Risposta #8 il: 18 Aprile 2013, 09:28:53 CEST »
0
puoi farlo in un'activity che poi erediti in tutte le tue altre activity....

eredità... perchè nn ci ho pensato prima....  o_O

Grazie Nicola  :-)

Offline danyr84

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperiia S
  • Sistema operativo:
    Android ICS 4.04
Re:Dopo la lettura apre l'applicazione "TAG"
« Risposta #9 il: 16 Settembre 2013, 17:41:08 CEST »
0
Ciao a tutti......stavo testando il codice ma quando avvio l'app la stessa non fa niente, il Log Cat rimane vuoto. Per il tag sto utilizzando Open NFC simulator.
Dove sbaglio?