Saturday, December 29, 2018

Cập nhật khi hệ thống chuyển sang ngày mới



Có những ứng dụng chạy liên tục cần có thời gian của hệ thống, mỗi khi chuyển sang ngày mới, ta cần biết để cập nhật.
Khai báo các biến cần dùng.
int con = 0;
PendingIntent pi;
BroadcastReceiver br;
AlarmManager am;
Tạo một hàm như sau.
private void setup() {
         br = new BroadcastReceiver() {
             @Override
             public void onReceive(Context c, Intent i) {
                 //cập nhật dữ liệu ở đây.
             }
         };
         registerReceiver(br, new IntentFilter("com.example.vidu"));
         pi = PendingIntent.getBroadcast(this, 0, new Intent("com.example.kl"),0);
am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + con, 86400000, pi);
}
Ở trong onCreate() ta tính thời gian chờ và gọi hàm như sau.
String p = new Date().toString();
         p = p.trim();
         String a[] = p.split(" ");
         String a1[] = a[3].split(":");
         int b = Integer.parseInt(a1[0]);
         int g = Integer.parseInt(a1[1]);
         int g2 = Integer.parseInt(a1[2]);
         int pu = b * 60 * 60 + g * 60+g2;
         pu = pu * 1000;
         con = 86400000 - pu;
         setup();

Bây giờ, từ lúc bật ứng dụng đến 12 giờ đêm alarm sẽ chạy, sau đó cứ 24 h tức qua ngày mới alarm lại cập nhật tiếp.
Cách này không làm hệ thống bị tốn pin vì số lần chạy alarm kiểm tra chỉ là tối thiểu.
Nhớ khai báo service trong file Manifest.xml
<service
            android:name=".myservice"
            android:enabled="true"
            android:exported="false" />
Và hủy đi khi thoát class.
@Override
    protected void onDestroy() {
super.onDestroy();
    am.cancel(pi);
    unregisterReceiver(br);  
    }

No comments:

Post a Comment