2014-07-01 8 views
16

Desidero che la mia app per dispositivi mobili venga attivata dalla "fine della navigazione" in Waze o nell'app Google Maps. Nella sua forma più semplice, vorrei che la mia app eseguisse qualcosa quando l'utente riceve la notifica "Sei arrivato a destinazione" dall'app di navigazione.Rilevamento della fine della navigazione in Waze o Google Maps per cellulari

Realizzo, almeno in Android, che posso avviare la navigazione (sia in Waze che in Google Maps app) creando un intent. Quindi, posso eseguire il mio sensore di prossimità nella mia app per aspettare che arrivi l'utente. Tuttavia, volevo qualcosa di molto più pulito - una situazione in cui tutto ciò che è richiesto all'utente è far funzionare la mia app in background e quindi a questa app per poter rispondere direttamente all'evento di arrivo.

Le soluzioni in iOS o Android sono benvenute. Anche le soluzioni di Hacky sono benvenute.

Grazie

risposta

2

Una soluzione semplice sarà quello di creare un GeoFence poco prima di avviare l'intento per la navigazione. Puoi ascoltare l'evento Geofence.GEOFENCE_TRANSITION_ENTER utilizzando un servizio intent in esecuzione in background. Quando si verifica questo evento, puoi svolgere qualsiasi compito tu debba svolgere dalla classe di servizio. Questo stesso principio può essere implementata in iOS anche: Ecco un tutorial per l'attuazione Geofence in ios http://www.raywenderlich.com/95014/geofencing-ios-swift e in Android http://paulusworld.com/technical/android-geofences

+1

Yup, ha menzionato questa opzione nella domanda. Lo svantaggio principale qui è che uno deve conoscere la destinazione a priori, piuttosto che "ascoltare" per un evento "arrivato" e poi comportarsi di conseguenza. Quest'ultimo è quello che sto cercando e può essere un modo per fornire alcune funzionalità extra piuttosto interessanti sulle applicazioni di navigazione esistenti (check-in, ecc.) – Stav

2

Una cosa eccellente hacky si potrebbe fare (quasi non vuoi pubblicare questo) sarebbe quello di utilizzare NotificationListenerService e tieni d'occhio le notifiche di google maps o waze.

http://developer.android.com/reference/android/service/notification/NotificationListenerService.html#nestedclasses

penso che dovrebbe essere per pubblico di utilizzare fino a quando si può.

Dovrai pensare a qualcosa di intelligente per le lingue, magari leggendo le risorse dalle app di google maps/waze per assicurarti di non perdere le notifiche che non sono in inglese.

Questo può essere praticabile anche per iOS: https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Specification/Specification.html Non ho esperienza personale con l'orologio Apis per iOS, quindi dovrete scavare lì da soli.

+0

Cool.Dammi un paio di giorni per provare e pubblicare i risultati. Grazie – Stav

+0

questa è un'idea interessante, e sono contento che tu l'abbia pubblicata! alcune applicazioni piuttosto grandi sono state avviate su hack molto peggio di questo penso ... – Petrov

+0

Qualcuno ha implementato questo e può riferire sulla stabilità? –

0

L'unica soluzione possibile è quella di eseguire il polling delle attività attive (quelle in primo piano) ogni X secondi e agire da lì. Puoi farlo con un servizio e un allarme.

Puoi farlo nei seguenti modi:

Controlla i processi in esecuzione in corso:

ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); 
    List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses(); 
    for (RunningAppProcessInfo process : processes) { 
     if (processName.equals(process.processName)) { 
      // do your thing 
     } 
    } 

OR (meno preferito) verificare la corrente applicazione in primo piano:

ActivityManager am = (ActivityManager) context 
       .getSystemService(Activity.ACTIVITY_SERVICE); 
     String packageName = am.getRunningTasks(1).get(0).topActivity 
       .getPackageName(); 
+0

Anche questo è un hack, viene votato fino a quando il post non viene aggiornato con informazioni più corrette. – JohanShogun

+0

ha aggiornato la mia risposta – MarkySmarky

+0

Votazione annullata, ma ho una domanda, osservando l'Apis disponibile per i processi in esecuzione, come si determina se l'utente è arrivato a destinazione o no? L'unica cosa che posso pensare è di fare affidamento sul fatto che entrambe le app mostrano un'attività diversa all'arrivo, cosa che non sono convinto di fare. – JohanShogun

0

In iOS i Non sono sicuro che riceverai una chiamata da google o Waze. il modo migliore è utilizzare startMonitoringForRegion. se inserisci la regione (destinazione) la tua app riceverà una chiamata. se la tua app non è in esecuzione, il sistema operativo avvierà la tua applicazione. spero che questo aiuti

Problemi correlati