Mam aplikację używającą Chrome custom tabs
do otwierania niektórych linków, potrzebuję mieć wydarzenie co sekundę przez cały czas pozostawania użytkownika w Chrome lub wiedzieć, ile czasu pozostanie w Chrome. Moim jedynym sposobem na to jest użycie Service
. Czy można to zrobić inaczej?Posłuchaj zdarzenia postępu na karcie niestandardowej Chrome
Odpowiedz
W celu implementacji niestandardowych zakładek Chrome skorzystałem z samouczka this, github link.
Moje rozwiązanie zasadniczo polegać na logicznych i System.currentTimeMillis().
Krok - 1: deklarujemy dwie klasy zmiennych globalnych,
private boolean isCustomTabsLaunched = false;
private long customTabsEnterTime;
Etap - 2: Set wartości powyżej zmiennych kiedy 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);
}
});
krok - 3: Oblicz czas pobytu w metodzie 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);
}
W celu uczynienia kodu bardziej wytrzymałe może chcesz zachować logiczną isCustomTabsLaunched i długą customTabsEnterTime w preferencjach lub bazy danych, tak w każdym razie te dwa params dostać zniszczone jako swoją aktywność może się zniszczyć w tle, jeśli pobyt użytkownika za długo czas w niestandardowej zakładce chrome.
Dziękuję za odpowiedź @Chitrang, problem z rozwiązaniem polega na tym, że jeśli zabijesz aktywność podczas nawigacji w systemie chrome, funkcja 'onResume()' nigdy nie będzie wywoływana, a utracisz dane:/ – Dichoben
Jak zamierzasz zabić czynność? Czy masz na myśli zabicie aplikacji w takim przypadku żadne rozwiązanie nie zadziała. – Chitrang
stworzyć swój YourBroadCastReceiver klasę następująco
public class YourBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Called every 60 seconds","called");
}
}
Po uruchomieniu Twój zakładka zwyczaj powodzeniem tworzyć PendingIntent alarmową, która wyzwoli YourBroadCastReceiver raz na 60 sekund.
// 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);
po zamknięciu swoją kartę niestandardową nigdy zapomnieć, aby anulować PendingIntent
PendingIntent.getBroadcast(
context, _pendingIntentId, alarmIntent, 0).cancel();
- 1. Javascript. Posłuchaj zdarzenia wstrząsu iPhone'a?
- 2. Otwórz aplikację Chrome na karcie
- 3. Zamykanie niestandardowej zakładki Chrome
- 4. Zaktualizuj karuzelę sowa "Strona" na karcie zdarzenia i bootstrap
- 5. knockout.js i posłuchaj sprawdzania zdarzenia w polu wyboru
- 6. Posłuchaj i odpowiedz na ANR?
- 7. Posłuchaj zdarzeń Kliknij na LineLayer
- 8. Firefox addon-sdk - posłuchaj nawigacji strony
- 9. Posłuchaj zmiany klasy w jquery
- 10. dodanie niestandardowej funkcjonalności do konsoli Chrome
- 11. Posłuchaj wydarzeń na klawiaturze i ruchu myszy poza aplikacją Electron
- 12. Posłuchaj tworzenia elementu i ogień zdarzenie, kiedy to pojawi się na stronie w Chrome Extension
- 13. Złapanie zdarzenia zamknięcia przeglądarki Chrome za pomocą sterownika Chrome
- 14. Apache Posłuchaj konfigurację
- 15. Pobierz żądanie Pakiet inicjujący na karcie Sieć
- 16. Posłuchaj wszystkich wydarzeń w Symfony 2
- 17. Rozszerzenie Chrome: jak otworzyć link w nowej karcie?
- 18. Rozszerzenie Chrome; otwórz link z popup.html w nowej karcie
- 19. Jak uniemożliwić Chrome żądanie zapisania informacji o karcie kredytowej?
- 20. Jak uzyskać koncentrację na karcie Chrome, która tworzy powiadomienia na pulpicie?
- 21. Rozszerzenie Chrome - otwórz przechwycony zrzut ekranu w nowej karcie
- 22. Wydajność zapisu na karcie SD
- 23. Usunięcie folderu na karcie SD
- 24. str_getcsv na karcie pliku oddzieloną
- 25. Dodawanie ikony na karcie JTabbedpane
- 26. Posłuchaj funkcji o nazwie JavaScript
- 27. Pozwolenie na zapis na karcie SD
- 28. C# Zaprojektowany nie rozpoznaje niestandardowego zdarzenia w niestandardowej kontroli użytkownika
- 29. Posłuchaj wszystkich wydarzeń w JavaScript
- 30. Pasek postępu JQuery Pasek postępu
Brzmi jak chcesz słuchać za zdarzenia, które pobiera opalane gdy Tab klienta jest zamknięty. Czy to jest poprawne? – ade
Tak, może to działać, jeśli mam łączny czas sesji użytkownika w wywołaniu zwrotnym, ale najlepiej będzie mieć wydarzenie każdorazowo. – Dichoben