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