Ho un'applicazione che utilizza Chrome custom tabs
per aprire alcuni collegamenti, ho bisogno di avere un evento ogni secondo durante tutto il tempo in cui l'utente rimane su Chrome, o sapere quante volte rimane su Chrome. Per me l'unico modo per farlo è usare uno Service
. È possibile farlo in modo diverso?Ascolta cronologia personalizzata cruscotto evento evento
risposta
Per l'implementazione delle schede personalizzate di Chrome ho seguito il tutorial this, github link.
La mia soluzione fondamentalmente si basano su booleane e System.currentTimeMillis().
Step - 1: dichiarare variabili globali due classi,
private boolean isCustomTabsLaunched = false;
private long customTabsEnterTime;
Step - 2: Impostare i valori per le variabili di cui sopra per quando launchUrl.
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "FloatingActionButton");
// Launch Chrome Custom Tabs on click
customTabsIntent.launchUrl(CustomTabsActivity.this, Uri.parse(URL));
isCustomTabsLaunched = true;
customTabsEnterTime = System.currentTimeMillis();
Log.d(TAG, "customTabsEnterTime = " + customTabsEnterTime);
}
});
Step - 3: Calcolare periodo di permanenza in metodo onResume.
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
if (isCustomTabsLaunched) {
isCustomTabsLaunched = false;
calculateStayTime();
}
}
private void calculateStayTime() {
long customTabsExitTime = System.currentTimeMillis();
Log.d(TAG, "customTabsExitTime = " + customTabsExitTime);
long stayTime = (customTabsExitTime - customTabsEnterTime)/1000; //convert in seconds
Log.d(TAG, "stayTime = " + stayTime);
}
Al fine di rendere il codice più robusto come si può memorizzare isCustomTabsLaunched booleano e lunga customTabsEnterTime nelle preferenze o database in modo, in ogni caso queste due params vengono distrutti come la vostra attività può diventare distruggere in background se il soggiorno utente a lungo ora nella scheda personalizzata di Chrome.
Grazie per la tua risposta @Chitrang, il problema con la tua soluzione è se uccidi l'attività durante la navigazione di Chrome, 'onResume()' non sarà mai chiamata e perderai i dati:/ – Dichoben
Come stai per uccidere il attività? O vuoi dire uccidere l'applicazione in quel caso nessuna soluzione funzionerà. – Chitrang
Creare la YourBroadCastReceiver classe come segue
public class YourBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Called every 60 seconds","called");
}
}
Dopo aver iniziato la scheda personalizzata creare con successo PendingIntent allarme che attiveranno YourBroadCastReceiver una volta ogni 60 sec.
// Retrieve a PendingIntent that will perform a broadcast
Intent repeatingIntent = new Intent(context,
YourBroadCastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
context, _pendingIntentId, alarmIntent, 0);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// Set the alarm to start at 10:00 AM
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
manager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), 60 * 1000, // repeat for every 60 seconds
pendingIntent);
dopo aver chiuso la vostra scheda personalizzata mai dimenticare di cancellare la vostra PendingIntent
PendingIntent.getBroadcast(
context, _pendingIntentId, alarmIntent, 0).cancel();
- 1. Nodo evento processo figlio ascolta
- 2. javascript modifica evento evento
- 3. Evento/aggiunta Evento esplicito, incompreso?
- 4. jQuery click off evento evento
- 5. Evento trascorso v Evidenzia evento?
- 6. WPF - Spegnimento evento ripetuto Aggiornamento evento
- 7. jQuery chiama evento click dopo evento taphold
- 8. Evento evento piattaforma ionica attivato due volte
- 9. Iscriviti evento a evento in C#?
- 10. orientationchange evento fuochi scorre e ridimensiona evento
- 11. Rilevamento evento stampa browser
- 12. history.pushState non attiva evento 'popstate'
- 13. Come aggiungere un evento OnClick per una vista personalizzata Android
- 14. Ottieni disconnessione evento dal sistema
- 15. laravel ascoltatore ascoltare evento multiplo
- 16. Evento di reinvio in FLEX
- 17. Eccezione invio contesto evento a chi ascolta un'istanza della classe org.springframework.web.context.ContextLoaderListener inizializzata
- 18. La coda eventi ajax JSF non funziona su evento-evento dopo evento di modifica
- 19. Differenza tra Carica evento, Attiva evento e Inserisci evento nel modulo
- 20. Implementazione di zipE :: Evento t a -> Evento t b -> Evento t (a, b)
- 21. scala evento altalena :: pollo o uovo
- 22. Perchè non un evento MouseUp prevenire un evento click
- 23. C# Differenza di Winform tra evento DoubleClick e evento MouseDoubleClick
- 24. evento fuoco sul vetrino giostra (non scivolare) evento, Bootstrap 3
- 25. evento di reset manuale, evento di reset automatico
- 26. Firing evento onItemDisclosure provoca evento itemtap al fuoco
- 27. Evento di ridimensionamento della finestra di evento sul tag dell'oggetto
- 28. Evento evento in intervallo/temporizzatore ad alta risoluzione
- 29. Evita evento click dopo evento mouseup e mouseup
- 30. Evento di modifica evento di selezione select2 dinamico
Sembra che si desidera ascoltare per un evento che viene attivato quando la scheda personalizzata è chiuso. È corretto? – ade
Sì, potrebbe funzionare se ho il tempo totale della sessione dell'utente nel callback, ma il migliore sarà avere un evento ogni volta X. – Dichoben