Bazı bağlantıları açmak için Chrome custom tabs
kullanarak bir uygulamam var. Kullanıcının Chrome'da kaldığı her saatte bir olaya sahip olması veya Chrome'da kaç kez kaldığını bilmem gerekiyor. Benim için bunu yapmanın tek yolu bir Service
kullanmaktır. Bunu farklı yapmak mümkün mü?Krom özel sekme ilerleme olayını dinle
cevap
Krom özel sekmelerin uygulanması için, this eğiticisini takip ettim, github link.
Çözümümün temelde boolean ve System.currentTimeMillis() güvenmektedir.
Adım - 1: iki sınıf global değişkenler bildirmek
private boolean isCustomTabsLaunched = false;
private long customTabsEnterTime;
Adım - 2: Yukarıdaki değişkenlere launchUrl için ayar değerleri.
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);
}
});
Adım - 3: hesaplayın onResume yönteminde zaman kalır.
@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);
}
eğer etkinlik olsun arka planda yok olabilir, bu iki parametreler yok olsun her durumda böylece tercihleri veya veritabanında Boole isCustomTabsLaunched ve uzun customTabsEnterTime saklamak isteyebileceğiniz kod daha sağlam hale getirmek için uzun süre kullanım kalmak chrome özel sekmesinde saat. Özel sekme başarıyla YourBroadCastReceiver kez her 60 saniyede tetikleyecek Alarm PendingIntent oluşturmak başlattıktan sonra
public class YourBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("Called every 60 seconds","called");
}
}
şöyle
Cevabınız için teşekkür ederiz @Chitrang, çözümünüzle ilgili sorun, krom gezinme sırasında etkinliği durdurursanız, 'onResume()' asla arama yapmazsınız ve veri kaybedersiniz:/ – Dichoben
Nasıl öldürüleceksiniz? aktivite? Yoksa uygulamayı öldürmek istemiyorsunuz, bu durumda çözüm işe yaramıyor. – Chitrang
senin YourBroadCastReceiver sınıf oluşturun.
// 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);
özel sekmeyi kapattıktan sonra sizin PendingIntent Custom Tab kapatıldığında kovuluyor bir olayı dinlemek istediğiniz gibi geliyor
PendingIntent.getBroadcast(
context, _pendingIntentId, alarmIntent, 0).cancel();
iptal etmek asla unutmam. Bu doğru mu? – ade
Evet, kullanıcının oturumunun toplam zamanını geri aramada kullanırsam işe yarayabilir, ancak en iyisi her X zamanındaki bir olaya sahip olmaktır. – Dichoben