studio developer customtabsintent custom chrometabs chrome android chrome-custom-tabs

android - developer - customtabsintent



Escucha el evento de progreso de la pestaƱa personalizada de Chrome (2)

Cree su clase YourBroadCastReceiver de la siguiente manera

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

Después de iniciar su pestaña personalizada, cree Alarm PendingIntent que activará YourBroadCastReceiver una vez cada 60 segundos.

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

después de cerrar la pestaña personalizada, nunca olvide cancelar su PendingIntent

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

Tengo una aplicación que utiliza las Chrome custom tabs para abrir algunos enlaces, necesito tener eventos cada segundo durante todo el tiempo que el usuario permanece en Chrome, o saber cuántas veces permanece en Chrome. Para mí, la única forma de hacerlo es utilizar un Service . ¿Es posible hacerlo de manera diferente?


Para la implementación de las pestañas personalizadas de Chrome, he seguido this tutorial, link github.

Mi solución básicamente se basa en boolean y System.currentTimeMillis () .

Paso - 1: declarar dos variables globales de clase,

private boolean isCustomTabsLaunched = false; private long customTabsEnterTime;

Paso 2: establece los valores de las variables anteriores cuando 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); } });

Paso - 3: Calcular el tiempo de permanencia en el método 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); }

Para hacer que el código sea más robusto, es posible que desee almacenar el booleano isCustomTabsLaunched y long customTabsEnterTime en las preferencias o la base de datos, por lo que, en cualquier caso, estos dos parámetros se destruirán, ya que su actividad puede destruirse en segundo plano si el usuario permanece durante mucho tiempo en la pestaña personalizada de Chrome.