Autore Topic: Problema AndroidManifest.xml con NFC  (Letto 4822 volte)

Offline guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Problema AndroidManifest.xml con NFC
« il: 29 Agosto 2011, 16:10:54 CEST »
0
Ciao a tutti,
ho un problema (penso abbastanza banale ma che non riesco a risolvere) con il Manifest file della mia app che fa uso di tag RFID ISO 15693. Il problema è il seguente: la mia app consta di 3 activity. Di queste 3, la prima e la terza devono leggere l'UID di un tag (anche diverso) appena questo viene avvicinato al cellulare, immagazzinare l'UID in memoria e confrontarlo con dei file salvati nella SD.
Il problema è che con il manifest file ed il codice java che ho scritto, gestendo il tutto tramite intent, succede che quando sono nella prima schermata dell'app e avvicino il tag mi compare un toast che mi chiede di scegliere tra le due istanze della mia applicazione.. come se dovessi dire al cellulare con quale activity gestire quell'intent... invece io vorrei che fosse tutto automatico... dove sbaglio?


Questo è il mio manifest:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="prova.applicazione"
     android:versionCode="1"
     android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10" />
   
    <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.NFC" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
       
        <uses-feature android:name="android.hardware.nfc" android:required="true" />

    <application android:icon="@drawable/logo" android:label="@string/app_name" android:debuggable="true">
       
       
        <activity android:name=".ApplicazioneActivity"
                 android:label="@string/app_name"
                 android:screenOrientation="portrait">
       
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
           
            <intent-filter>
                        <action android:name="android.nfc.action.TECH_DISCOVERED"/>
                        </intent-filter>       
                       
                        <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                                           android:resource="@xml/nfc_tech_filter" />
           
        </activity>


                <activity android:name=".ApplicazioneActivity2"
                 android:label="@string/app_name"
                 android:screenOrientation="portrait">  
                </activity>
               
               
                <activity android:name=".ApplicazioneActivity3"
                 android:label="@string/app_name"
                 android:screenOrientation="portrait">
           
            <intent-filter>
                        <action android:name="android.nfc.action.TECH_DISCOVERED"/>
                        </intent-filter>       
                       
                        <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                                           android:resource="@xml/nfc_tech_filter" />
                 
                </activity>
               
    </application>
</manifest>

Questa è lo spezzone di codice con il quale ottengo la lettura dell'UID:

Codice: [Seleziona]

....

public static byte [] tagId;
public static NfcV nfcv;

.....

Intent intent = getIntent();
String action = intent.getAction();
    if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {
    Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
    nfcv = NfcV.get(tagFromIntent);

Il codice java è il medesimo per la prima e la terza activity e quello che vado a fare è leggere poi tagID.
Grazie a tutti per l'aiuto che potrete darmi!

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:Problema AndroidManifest.xml con NFC
« Risposta #1 il: 29 Agosto 2011, 16:29:28 CEST »
0
se vuoi che la lettura venga fatta ad activity aperta, devi abilitare il foreground dispatch.
Se guardi sul sito ufficiale c'è una miniguida su come usarlo...
se te usi il manifest, ovviamente ti chiederà cosa fare il sistema, oppure RIlancerà l'activity (cosa che non vuoi).
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 guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Problema AndroidManifest.xml con NFC
« Risposta #2 il: 29 Agosto 2011, 16:32:14 CEST »
0
Citazione
se te usi il manifest, ovviamente ti chiederà cosa fare il sistema, oppure RIlancerà l'activity (cosa che non vuoi).
Ciao Nicola!!! E' vero! La rilancia! E non lo voglio no...! FOREGROUND DISPATCH... questo mi era sfuggito! Grazie mille! Vado subito a dargli un'occhiata!!  ;-)

Offline guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Problema AndroidManifest.xml con NFC
« Risposta #3 il: 30 Agosto 2011, 10:48:43 CEST »
0
Ovviamente funziona alla perfezione! Ora si che si ragiona! Prima, tutte le volte che avvicinavo il tag, praticamente mi apriva un'altra volta l'activity. Adesso molto meglio. Qualche suggerimento a chi vorrà usare il foreground dispatch.
Innanzi tutto qualche link:

Near Field Communication | Android Developers

ForegroundDispatch.java | Android Developers

Seguite alla lettera l'esempio. Poi io ho dovuto fare le seguenti modifiche:

1) Ho tolto:

Codice: [Seleziona]
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndef.addDataType("*/*");
        } catch (MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        mFilters = new IntentFilter[] {
                ndef,
        };

Sostituendolo con:

Codice: [Seleziona]
IntentFilter ntech = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);

                mFilters = new IntentFilter[] {
                                ntech,
                };

In quanto gli NfcV (RFID ISO 15693) non sono tipi NDEF.

Poi qui:

Codice: [Seleziona]
@Override
    public void onPause() {
        super.onPause();
        //mAdapter.disableForegroundDispatch(this);
        throw new RuntimeException("onPause not implemented to fix build");
    }

Ho tolto il commento e eliminato la riga
Codice: [Seleziona]
throw new RuntimeException("onPause not implemented to fix build");
Infine, nel Manifest file non avrete più bisogno di:

Codice (XML): [Seleziona]
<intent-filter>
                        <action android:name="android.nfc.action.TECH_DISCOVERED"/>
                        </intent-filter>      
                       
                        <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                                          android:resource="@xml/nfc_tech_filter" />

Che chiaramente non vuol dire non creare il file xml nfc_tech_filter, quello ci vuole. Solo che si richiama dal codice con la riga:
Codice: [Seleziona]
mTechLists = new String[][] { new String[] { NfcV.class.getName() } };
Infatti la guida per gli sviluppatori dice:

Citazione
Call the Object.class.getName() method to obtain the class of the technology that you want to support.

Ciao e grazie per la dritta Nicola!!  ;-)

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:Problema AndroidManifest.xml con NFC
« Risposta #4 il: 30 Agosto 2011, 11:47:39 CEST »
0
bella serie di spiegazioni! mi piacerebbe fare un tutorial, ma non ho mai tempo...
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 guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Problema AndroidManifest.xml con NFC
« Risposta #5 il: 30 Agosto 2011, 11:56:22 CEST »
0
Grazie!
Mi proporrei volentieri per aiutarti (sono favorevolissimo a questo genere di cose e mi piace farle) però davvero ci vorrebbero le giornate di 48 ore... anche perché il lavoro porta via già molto tempo della giornata... però io direi di continuare così e riaggiornarci più avanti semmai, perché l'idea del tutorial è buona... se nel mio piccolo posso darti una mano in qualche modo volentieri.. intanto stiamo raccogliendo del buon materiale tramite i post mi sembra... sarebbe bello fare un tutorial che copra tutte le tecnologie RFID...
Adesso devo buttarmi su un problema molto più grande e arduo da risolvere... non so se hai visto il topic sulla vpn... quello si che è uno scoglio... rimpiangerò l'RFID..  :D :-P a presto! ;-)

Offline guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Problema AndroidManifest.xml con NFC
« Risposta #6 il: 01 Settembre 2011, 14:46:56 CEST »
0
Rieccomi Nicola..  :-P
Ti volevo chiedere una cosa.. c'è un modo definitivo per rimuovere quel toast che compare e che mi chiede di "Completare l'azione con..."? Per quanto riguarda la mia applicazione ho risolto ma adesso, avendo installate altre applicazioni in grado di leggere tag rfid (es. Tag, NFCClassic, ecc..) succede che si uno si attarda a scansare la tessera rfid dal retro del cellulare e la mantiene vicina per 1 secondo in più quando passo ad un'activity in cui non serve l'rfid, mi comprare quella fastidiosa schermata di scelta... grazie!!  ;-)

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:Problema AndroidManifest.xml con NFC
« Risposta #7 il: 01 Settembre 2011, 17:39:36 CEST »
0
Rieccomi Nicola..  :-P
Ti volevo chiedere una cosa.. c'è un modo definitivo per rimuovere quel toast che compare e che mi chiede di "Completare l'azione con..."? Per quanto riguarda la mia applicazione ho risolto ma adesso, avendo installate altre applicazioni in grado di leggere tag rfid (es. Tag, NFCClassic, ecc..) succede che si uno si attarda a scansare la tessera rfid dal retro del cellulare e la mantiene vicina per 1 secondo in più quando passo ad un'activity in cui non serve l'rfid, mi comprare quella fastidiosa schermata di scelta... grazie!!  ;-)
eh no, l'nfc funziona cosi! legge SEMPRE. Quindi se non c'è nessuna TUA activity che "locka" l'nfc, lui legge e chiede cosa fare!
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 guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Problema AndroidManifest.xml con NFC
« Risposta #8 il: 02 Settembre 2011, 10:30:17 CEST »
0
Citazione
eh no, l'nfc funziona cosi! legge SEMPRE. Quindi se non c'è nessuna TUA activity che "locka" l'nfc, lui legge e chiede cosa fare!
Ho capito.. quindi diciamo che una possibile strategia per evitare che questo accada (almeno durante le activity della mia applicazione) potrebbe essere quella di inserire un foreground dispatcher anche nelle activity che di fatto non hanno bisogno dell'nfc e in caso di lettura del tag fargli leggere l'uid e basta (ad esempio)? Anche se fa un po' schifo come approccio...  :-P
Preferirei far capire alla gente che non si deve tenere appoggiata la tessera al retro del terminale anche a lettura avvenuta :D
Grazie Nicola.. come sempre molto disponibile.  ;-)

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Problema AndroidManifest.xml con NFC
« Risposta #9 il: 02 Settembre 2011, 11:02:26 CEST »
0
Attendo il tutorial  :-P
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

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:Problema AndroidManifest.xml con NFC
« Risposta #10 il: 02 Settembre 2011, 11:05:19 CEST »
0
Ho capito.. quindi diciamo che una possibile strategia per evitare che questo accada (almeno durante le activity della mia applicazione) potrebbe essere quella di inserire un foreground dispatcher anche nelle activity che di fatto non hanno bisogno dell'nfc e in caso di lettura del tag fargli leggere l'uid e basta (ad esempio)? Anche se fa un po' schifo come approccio...  :-P
Preferirei far capire alla gente che non si deve tenere appoggiata la tessera al retro del terminale anche a lettura avvenuta :D
Grazie Nicola.. come sempre molto disponibile.  ;-)
esatto, si mette un foreground dispatcher con filter e class null (quindi TUTTI i tag possibili). Facendo cosi ti viene richiamata la tua callback nell'activity, te basta che non fai niente (non serve leggere l'uid), fai un Log.w "tag ignorato" e via
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 guidocx84

  • Utente junior
  • **
  • Post: 68
  • Respect: 0
    • Mostra profilo
Re:Problema AndroidManifest.xml con NFC
« Risposta #11 il: 02 Settembre 2011, 11:17:05 CEST »
0
Citazione
esatto, si mette un foreground dispatcher con filter e class null (quindi TUTTI i tag possibili). Facendo cosi ti viene richiamata la tua callback nell'activity, te basta che non fai niente (non serve leggere l'uid), fai un Log.w "tag ignorato" e via
Ottimo!!! Non è proprio il massimo come approccio ma per risolvere il problema di sicuro è il modo migliore.. Grazie mille!

Offline lorenzo1889

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
Re:Problema AndroidManifest.xml con NFC
« Risposta #12 il: 23 Febbraio 2014, 10:40:12 CET »
0
esatto, si mette un foreground dispatcher con filter e class null (quindi TUTTI i tag possibili). Facendo cosi ti viene richiamata la tua callback nell'activity, te basta che non fai niente (non serve leggere l'uid), fai un Log.w "tag ignorato" e via

io ho lo stesso problema vorrei che in alcune activity della mia applicazione venga ignorato il segnale dato dalla prossimità di un tag nfc (mi si  riavvia l'app da capo).
non riesco a capire quali parti del  foreground dispatcher devo mettere null in modo da non lanciare un eccezione. mi aiutate? grazie

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:Problema AndroidManifest.xml con NFC
« Risposta #13 il: 23 Febbraio 2014, 12:22:40 CET »
0
io ho lo stesso problema vorrei che in alcune activity della mia applicazione venga ignorato il segnale dato dalla prossimità di un tag nfc (mi si  riavvia l'app da capo).
non riesco a capire quali parti del  foreground dispatcher devo mettere null in modo da non lanciare un eccezione. mi aiutate? grazie
guarda qui:
Advanced NFC | Android Developers
se leggi le spiegazioni bene, vedi dove mettere il filtro con i valori a null
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