2016-05-31 18 views
17

Tôi có một ứng dụng sử dụng Chrome custom tabs để mở một số liên kết, tôi cần phải có sự kiện mỗi giây trong suốt thời gian người dùng ở lại trên Chrome hoặc biết thời gian anh ở lại trên Chrome. Đối với tôi, cách duy nhất để làm điều đó là sử dụng Service. Có thể làm điều đó khác đi không?Nghe sự kiện tiến độ tab tùy chỉnh chrome

+0

Có vẻ như bạn muốn nghe cho một sự kiện được phát sinh khi Tab Tuỳ chỉnh được đóng lại. Điều này có đúng không? – ade

+0

Có, nó có thể hoạt động nếu tôi có tổng thời gian phiên của người dùng trong cuộc gọi lại, nhưng tốt nhất là phải có sự kiện mỗi lần X. – Dichoben

Trả lời

1

Để triển khai các tab tùy chỉnh chrome tôi đã theo dõi this hướng dẫn, github link.

Giải pháp của tôi về cơ bản dựa trên booleanSystem.currentTimeMillis().

Bước - 1: Khai báo biến toàn cục hai lớp,

private boolean isCustomTabsLaunched = false; 
    private long customTabsEnterTime; 

Bước - 2: Set giá trị cho ở trên để biến khi 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); 
     } 
    }); 

Bước - 3: Tính lại thời gian trong phương pháp 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); 
    } 

Để làm cho mã mạnh mẽ hơn bạn có thể muốn lưu trữ isCustomTabsLaunched boolean và customTabsEnterTime dài trong tùy chọn hoặc cơ sở dữ liệu như vậy trong mọi trường hợp hai params những được tiêu huỷ như hoạt động của bạn có thể nhận được tiêu diệt trong nền nếu nghỉ sử dụng trong thời gian dài thời gian trong tab tùy chỉnh chrome.

+1

Cảm ơn bạn đã trả lời @Chitrang, vấn đề với giải pháp của bạn là nếu bạn giết hoạt động trong khi điều hướng chrome, 'onResume()' sẽ không bao giờ gọi và bạn sẽ mất dữ liệu:/ – Dichoben

+0

Làm thế nào bạn sẽ giết Hoạt động? Hoặc bạn có nghĩa là giết các ứng dụng trong trường hợp đó không có giải pháp sẽ làm việc. – Chitrang

2

Tạo lớp YourBroadCastReceiver của bạn như sau

public class YourBroadCastReceiver extends BroadcastReceiver { 

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

} 

Sau khi khởi động tab tùy chỉnh của bạn tạo thành công Alarm PendingIntent sẽ kích hoạt YourBroadCastReceiver một lần mỗi 60 giây.

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

sau khi đóng tab tùy chỉnh của bạn không bao giờ quên để hủy bỏ PendingIntent bạn

PendingIntent.getBroadcast(
     context, _pendingIntentId, alarmIntent, 0).cancel(); 
Các vấn đề liên quan