繁体   English   中英

根据一天中的时间更改图像

[英]Change an image according to time of day

我想要Google Now应用的功能,例如白天时,标题是晴天图像,中午或日落时,图像变为日落图像,晚上时,图像变为夜间图像,并且相同一早。

我正在尝试实现做同样事情的背景,我该如何实现呢? 我已经对此进行了搜索,但是答案是针对html和网站开发的。

其他大多数都是基于时间间隔的,我认为这是我应该使用的,但是我想要这样的事情。 用非技术语言编写

01:00/1am - Morning - Image changes to Morning.png on the imageview (R.id.view).

09:00/9am - Normal - Image changes to Daytime.png on the imageview (R.id.view).

12:00/12pm - Noon - Image changes to Noon.png on the imageview (R.id.view).

19:00/7pm - Night - Image changes to Noon.png on the imageview (R.id.view).

我该如何实现类似的目标?

我建议您编写一个具有侦听方法的类。 必须定期调用此侦听方法,该方法会检查时间并引发活动级别的自定义事件(您可以在此处使用接口)。 您可以使用Timer和TimerTask或CountdownTimer进行调用。

那么,这项工作的最佳人选是AlarmManager

假设您仅在运行Activity时需要更改背景。 您可以在创建活动时设置闹钟:

private PendingIntent pi=null;
private AlarmManager mgr=null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mgr=(AlarmManager)getSystemService(ALARM_SERVICE);
    pi=createPendingResult(ALARM_ID, new Intent(), 0);
    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME,
    SystemClock.elapsedRealtime() + PERIOD, PERIOD, pi);
}

PERIOD(ms)是我们想要获得控制的频率(onActivityResult)。 createPendingResult(ALARM_ID, new Intent(), 0); 行创建一个可以在您的Activity onActivityResult方法中捕获的Intent:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (requestCode == ALARM_ID) {
      // This is where you check the time and change your background!
   }
}

您还需要在onDestroy中取消警报:

@Override
public void onDestroy() {
    mgr.cancel(pi);
    super.onDestroy();
}

要检查日期是否在特定间隔内,可以使用:

boolean isWithinRange(Date testDate) {
    return testDate.getTime() >= startDate.getTime() &&
             testDate.getTime() <= endDate.getTime();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM