2015-11-10 25 views
5

Tôi muốn biết liệu có một đối tác Android cho tính năng iOS BackgroundFetch hay không.Tương thích với nền tảng iOS tương thích trong Android

Tôi muốn ứng dụng Android của mình sử dụng Cordova để thức dậy sau mỗi 15 phút hoặc lâu hơn và kiểm tra các bản cập nhật và thực hiện một số nhiệm vụ khác.

Trong iOS, tôi có thể thực hiện việc này bằng cách sử dụng plugin cordova-background-fetch.

Vì không có phiên bản Android của plugin đó, tôi sẵn lòng tự viết nó; nhưng trước tiên tôi muốn biết làm thế nào tôi sẽ đi về việc thực hiện các tính năng như vậy trong Android. Bất kỳ đề xuất?

Trả lời

1

Trong Android, bạn có thể đặt AlarmManger để đánh thức mỗi X mili giây và chạy PendingIntent.

Mã này trông giống như thế này.

AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent i=new Intent(context, OnAlarmReceiver.class); 
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0); 

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        SystemClock.elapsedRealtime()+60000, 
        PERIOD, 
        pi); 

Mặc định của Android IntentService chạy trong nền có một số hạn chế.

Bạn cũng có thể xem qua thư viện bên ngoài WakefulIntentService (https://github.com/commonsguy/cwac-wakeful). Tôi sử dụng nó cùng với AlarmManager để chạy các tác vụ nền.

Cập nhật:

OnAlarmReceiver lớp

public class OnAlarmReceiver extends BroadcastReceiver { 

    public static String TAG = "OnAlarmReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "Waking up alarm"); 
     WakefulIntentService.sendWakefulWork(context, YourService.class); // do work in the service class 
    } 

} 

YourService lớp

public class YourService extends WakefulIntentService { 

     public static String TAG = "YourService"; 

     public YourService() { 
      super("YourService"); 
     } 

     @Override 
     protected void doWakefulWork(Intent intent) { 
      Log.d(TAG, "Waking up service"); 

     // do your background task here 
     } 
} 
+0

Đây dường như là một điểm khởi đầu tốt. Tôi đã thực hiện lớp 'OnAlarmReceiver' bằng cách mở rộng' BroadcastReceiver'. Tôi có cần gọi 'registerReceiver' ở đâu đó để nghe ý định được phát trong dòng thứ ba không? Không thể tìm thấy 'registerReceiver' trong codebase của' WakefulIntentService', và tôi đang bối rối. –

+0

@MikeC Tôi đã cập nhật câu trả lời với ví dụ hoàn chỉnh. Bạn cũng sẽ phải xác định dịch vụ và bộ thu của bạn trong tệp kê khai để làm cho nó hoạt động. – Sharj

+0

Tôi không kết thúc bằng cách sử dụng 'WakefulIntentService', nhưng cảm ơn đã chỉ cho tôi đúng hướng. –

Các vấn đề liên quan