Hören Sie Chrome Custom Tab Fortschrittsereignis

Ich habe eine Anwendung mit Chrome custom tabs , um einige Links zu öffnen, muss ich Event jede Sekunde haben während der ganzen Zeit der Benutzer auf Chrome bleiben, oder wissen, wie viele Zeit er auf Chrome bleiben. Für mich ist der einzige Weg, es zu tun, einen Service zu benutzen. Ist es möglich, es anders zu machen?

  • Firebase Dynamic Links nicht tiefe Verknüpfung mit kurzer URL auf benutzerdefinierten Registerkarten
  • SetCloseButtonIcon () -Methode ändert nicht die Standard-Schaltfläche Schließen
  • Benutzerdefinierte Chrom-Tabs fragt nach mehreren Browser zu wählen
  • CustomTabs zeigt ERR_UNKNOWN_URL_SCHEME nach 302 Redirect
  • Wie fügen Sie benutzerdefinierte HTTP-Header zu Chrome Custom Tabs hinzu?
  • Com.android.support:customtabs: Keine virtuelle Methode launchUrl
  • Chrome Custom Tabs ändern die Standard-Close-Taste nicht funktioniert
  • Wie benutzt man Chrome benutzerdefinierte Tabs unter api 16?
  • 2 Solutions collect form web for “Hören Sie Chrome Custom Tab Fortschrittsereignis”

    Erstellen Sie Ihre YourBroadCastReceiver-Klasse wie folgt

     public class YourBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("Called every 60 seconds","called"); } } 

    Nachdem Sie Ihre benutzerdefinierte Registerkarte erfolgreich gestartet haben, erstellen Sie Alarm PendingIntent, der Ihren BroadCastReceiver einmal alle 60 Sek. Auslöst.

      // 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); 

    Nach dem Schließen deiner benutzerdefinierten Registerkarte niemals vergessen, deinen PendingIntent abzubrechen

     PendingIntent.getBroadcast( context, _pendingIntentId, alarmIntent, 0).cancel(); 

    Für die Implementierung von Chrome Custom Tabs habe ich diesem Tutorial, Github Link gefolgt.

    Meine Lösung basiert grundsätzlich auf boolean und System.currentTimeMillis () .

    Schritt 1: Deklariere zwei globale globale Variablen,

      private boolean isCustomTabsLaunched = false; private long customTabsEnterTime; 

    Schritt 2: Setzen Sie Werte für oben auf Variablen, wenn 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); } }); 

    Schritt 3: Berechnen Sie die Aufenthaltszeit in der onResume-Methode.

      @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); } 

    Um den Code robuster zu machen, kannst du boolean isCustomTabsLaunched und lange customTabsEnterTime in Präferenzen oder Datenbank speichern, so dass auf jeden Fall diese beiden Params zerstört werden, da deine Aktivität im Hintergrund zerstört werden kann, wenn der Benutzer lange Zeit im Chrome Custom Tab bleibt.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.