2014-05-21 2 views
0

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). 

나는 어떻게 이와 비슷한 것을 얻을 수 있습니까?

+0

당신은 응용 프로그램이나 위젯에만 원하십니까? 앱은 쉽습니다 : 앱이 열릴 때마다 현재 시간을 가져 와서 프로그래밍 방식으로 이미지를 변경하십시오. 한 가지 가능한 방법은 imageView를 헤더로 사용하여 레이아웃을 수행하는 것입니다. 그런 다음 앱에서 시간을 가져 와서이 imageView를 참조한 다음 원하는 사진 만 변경하십시오. 시간이 지남에 따라 작동해야하는 경우 Alarm Manager를 사용하여이 작업을 수행 할 수 있습니다. – Opiatefuchs

+0

그래, 그게 좋은 생각이 될거라고 생각하고, 내 신청서에 대해서. – Robin

답변

0

이 작업에 가장 적합한 후보는 AlarmManager입니다!

활동이 실행 중일 때 배경을 변경해야한다고 가정합니다. 당신이 당신의 활동 만들 때 알람을 설정할 수 있습니다

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

기간 (MS) 우리가 (onActivityResult를를) 제어를 얻을 빈도입니다.

@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(); 
} 

확인하기 위해 createPendingResult(ALARM_ID, new Intent(), 0); 줄은 활동 onActivityResult를 방법에 catch 할 수있는 의도를 생성 당신은 사용할 수 있습니다 :

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

설명과 코드 샘플을 보내 주셔서 감사합니다. 두 번째 방법에서는 시간을 확인하고 이미지를 표시하는 데 사용해야 할 일은 무엇입니까? – Robin

+0

내 대답을 업데이트했습니다. 간단한 날짜를 사용하고 http://stackoverflow.com/a/494203/1803821에서 얻은 방법을 사용하여 필요한 간격에 있는지 확인할 수 있습니다. – VM4

+0

답변 해 주셔서 감사합니다. 매우 도움이됩니다. – Robin

0

청취 방법이있는 클래스를 작성하라고 조언합니다. 활동 레벨에서 시간을 확인하고 사용자 정의 이벤트 (여기서 인터페이스 사용 가능)를 발생시키는이 청취 메소드는 주기적으로 호출되어야합니다. 타이머 및 타이머 태스크 또는 카운트 다운 타이머를 사용하여 호출 할 수 있습니다.

관련 문제