Autore Topic: NFC & partenza App  (Letto 1768 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 319
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
NFC & partenza App
« il: 19 Giugno 2014, 17:02:44 CEST »
0
Ciao ragazzi,
invece del classico "android.nfc.action.TECH_DISCOVERED" nel manifest e filter nella cartella res/xml io mi sono affidato alla possibilità di poter aggiungere un record "Application" sul TAG NFC che mi fa partire direttamente la mia app, e nel caso non sia installata sul telefono la va a scaricare dal google play.

Ho inoltre aggiunto un secondo record "Data"  che contiene un parametro in text/plain che vorrei utilizzare alla partenza dell'App. I record che ho sul TAG NFC sono i seguenti:
Codice: [Seleziona]
NdefRecord tnf=4 type=616E64726F69642E636F6D3A706B67 payload=636F6D2E6578616D706C652E706970706F
                       a n d r o i d . c o m : p k g          c o m . e x a m p l e . p i p p o
NdefRecord tnf=2 type=746578742F706C61696E payload=706970706F
                       t e x t / p l a i n          p i p p o

Nella Main ho aggiunto la chiamata ad un listener (classe NFCForegroundUtil sottostante):

Codice: [Seleziona]
public class NFCForegroundUtil {

private NfcAdapter nfc;


private Activity activity;
private IntentFilter intentFiltersArray[];
private PendingIntent intent;
private String techListsArray[][];

public NFCForegroundUtil(Activity activity) {
    super();
    this.activity = activity;
    nfc = NfcAdapter.getDefaultAdapter(activity.getApplicationContext());

    intent = PendingIntent.getActivity(activity, 0, new Intent(activity,
            activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);

    try {
        ndef.addDataType("*/*");
    } catch (MalformedMimeTypeException e) {
        throw new RuntimeException("Unable to speciy */* Mime Type", e);
    }
    intentFiltersArray = new IntentFilter[] { ndef };

    techListsArray = new String[][] { new String[] { NfcA.class.getName() } };
    //techListsArray = new String[][] { new String[] { NfcA.class.getName(), NfcB.class.getName() }, new String[] {NfcV.class.getName()} };
}

public void enableForeground()
{
    Log.d("demo", "Foreground NFC dispatch enabled");
    nfc.enableForegroundDispatch(activity, intent, intentFiltersArray, techListsArray);     
}

public void disableForeground()
{
    Log.d("demo", "Foreground NFC dispatch disabled");
    nfc.disableForegroundDispatch(activity);
}

public NfcAdapter getNfc() {
    return nfc;
}   

}


Appoggiando il TAG con nessuna App in esecuzione riesco a far partire la mia App;  però da dentro la main con la onNewIntent non riesco a catturare il contenuto del secondo record con il mio parametro "pippo". Solamente avvicinando il tag una seconda volta riesco a leggere l'array dei messaggi:

Codice: [Seleziona]
                String parameter = "";
                String androidPkg = "";
                for (int i = 0;i < messages[0].getRecords().length; i++) {
                String resultType="";                   
                    byte[] type = messages[0].getRecords()[i].getType();
                for (int y = 0; y < type.length; y++) {
                    resultType += (char) type[y];
                }                   
                   
                String resultPayload="";
                byte[] payload = messages[0].getRecords()[i].getPayload();
                for (int y = 0; y < payload.length; y++) {
                    resultPayload += (char) payload[y];
                }
                if (resultType.equals("android.com:pkg")){
                        androidPkg = resultPayload;
                }
                if (resultType.equals("text/plain")){
                        parameter = resultPayload;
                }               

Sono quindi a chiedervi se è possibile poter far convivere capra e cavoli, nel mio caso far partire un App e nel caso non sia installata far partire l'installazione della stessa andandola a prelevare dal google play e nel frattempo passagli un parametro da recuperare dalla Main d'apertura per fare una azione legata al singolo TAG.
Ad esempio se volessi far partire un App per la lettura di un manuale di centinaia di pagine posizionandolo alla pagina corretta che è scritta sul secondo record del TAG NFC e nel caso non sia installata l'app il dispositivo in automatico va a scaricarsi l'app dal google play? Avendo più TAG potrei quindi aprire correttamente il manuale alla pagina relativa ad ogni singolo TAG. ;)

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:NFC & partenza App
« Risposta #1 il: 19 Maggio 2016, 17:33:11 CEST »
0
Ciao,
mi interessa la modalità , apertura mia app e la scarica dal google  play, mi puoi postare qualche esempio ?
Grazie
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline wlf

  • Utente normale
  • ***
  • Post: 319
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:NFC & partenza App
« Risposta #2 il: 20 Maggio 2016, 09:13:01 CEST »
0
Per questo fai senza scrivere codice; ti basta installare un App come NFC Tools da questa vai in "Scrittura/Aggiungi campo/Applicazione" e selezioni la tua app da far partire oppure digiti il nome del tuo package (com.example.app), quindi fai "Scrittura" appoggiando un TAG NFC.
A questo punto il TAG è pronto per chiamare la tua Applicazione, se è installlata questa parte, se non lo è parte il Play per scaricarla.

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:NFC & partenza App
« Risposta #3 il: 20 Maggio 2016, 09:23:16 CEST »
0
Grazie.
Però dovrei dire al cliente di installare NFC TOOL, non riesco a fare tutto dalla mia app ?
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline wlf

  • Utente normale
  • ***
  • Post: 319
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:NFC & partenza App
« Risposta #4 il: 20 Maggio 2016, 12:30:06 CEST »
+1
Si, allora devi prevedere dalla tua app la scrittura di un TAG NFC; dovresti casomai creare un App di utility per scrivere un TAG NFC.

Prima devi leggerti il TAG NFC avvicinandolo e lasciandolo accostato allo smartphone

Codice: [Seleziona]
        @Override
        protected void onNewIntent(Intent intent) {
                super.onNewIntent(intent);
                if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){
                        myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);   
                        Toast.makeText(this, "Tag trovato - " + myTag.toString(), Toast.LENGTH_LONG ).show();
                }
        }

Poi puoi passare myTag e il tuo application record alla write.

Codice: [Seleziona]
        String applicationRecord = "com.example.yourapp";

        private void write(String applicationRecord , Tag tag) throws IOException, FormatException {

                NdefMessage msg = new NdefMessage(NdefRecord.createApplicationRecord(applicationRecord));
               
                // Get an instance of Ndef for the tag.
                Ndef ndef = Ndef.get(tag);
                // Enable I/O
                ndef.connect();
                // Write the message
                ndef.writeNdefMessage(msg);
                // Close the connection
                ndef.close();
        }

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:NFC & partenza App
« Risposta #5 il: 20 Maggio 2016, 12:37:35 CEST »
0
ok.
Grazie
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .