2013-04-24 2 views
0

내 활동에 카운트 다운 타이머가 있습니다. 이제 다른 활동을 시작하는 버튼이 있습니다. 버튼을 클릭하면 현재 카운트 다운 타이머 값을 저장하고 저장된 값에서 두 번째 활동으로 카운트 다운 타이머를 시작해야합니다. 나는 의도를 사용하여 시간을 보낼 생각 이었지만 어떤 가치가 전달 될지 모른다. 어떻게해야합니까? 내 타이머 :변수에 카운트 다운 타이머 값을 저장하는 방법은 무엇입니까?

public String formatTime(long millis) { 
     String output = "00:00"; 
     long seconds = millis/1000; 
     long minutes = seconds/60; 

     seconds = seconds % 60; 
     minutes = minutes % 60; 

     String sec = String.valueOf(seconds); 
     String min = String.valueOf(minutes); 

     if (seconds < 10) 
      sec = "0" + seconds; 
     if (minutes < 10) 
      min= "0" + minutes; 

     output = min + " : " + sec; 
     return output; 
    } 

그리고에서 onCreate 메서드에서 :

// New timer for 40 minutes, starts after initialization 
     new MyCount(2400000, 1000) 
     { 
      // Updates the text on your "scoreboard" every second 
      public void onTick(long millisUntilFinished) 
      { 
       vreme.setText("" + formatTime(millisUntilFinished)); 
      } 

      public void onFinish() 
      { 

      } 
     }.start(); 
    } 

    public class MyCount extends CountDownTimer { 
     public MyCount(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     public void onFinish() { 


     } 
     public void onTick(long millisUntilFinished) { 
      vreme.setText("" + millisUntilFinished/1000); 
     } 
+0

'Intent'에서 추가로 millisUntilFinished를 전달할 수없는 이유는 무엇입니까? – Simon

+0

아마도'intent.putExtra (String, String)'입니까? 그리고'onReceive()'에서'intent.getStringExtra (String)' – StoneBird

+0

어떤 문자열입니까? millisUntilFinished는 길지 않은가요? – marjanbaz

답변

0

그것은 당신이 찾고있는 정보처럼 보이지 않는이 CountDownTimer에서 사용할 수 있습니다. 당신이 당신의 시간에 아주 정확할 필요가없는 경우에 당신은 vreme에서 다만 끈을 당길 수있다.

당신이 그보다 더 정확하다고 가정하면 타이머가 시작될 때 타임 스탬프를 저장하고 얼마나 많은 시간이 경과했는지 알 필요가있을 때 현재 시간과의 차이를 얻는 것이 좋습니다. 필요에 따라 uptimeMillis() 또는 elapsedRealtime()을 확인하십시오.

+0

아니요, 몇 초가 미터가 아닙니다. 사용자가 게임을 완료해야하는 20 분짜리 창이 있습니다. 그래서 저는 두 번째 시합이 그렇게 나쁠 것이라고 생각하지 않습니다. – marjanbaz

+0

그러면 vreme.getText(). toString()을 사용하여 타이머 문자열을 꺼낼 수 있습니다. 이 시간을 얻기 위해 약간의 파싱을해야 할 것입니다. 또는 가장 최근의 millisUntilFinished를 저장하는 onTick 메서드에 무언가를 추가 할 수 있습니다.이 메서드는 의도에 전달할 수 있습니다. – rhnoble

+0

좋아요, 그랬지요.하지만 String (19:42 같은 것을 얻습니다)을 오랫동안 파싱 할 수 있습니까? – marjanbaz

0

정상적으로 답변 드리겠습니다. 여기 내가 한 일이있다. 내 첫 번째 활동에서 나는 원래의 게시물에있는 모든 물건을했다, 게다가 난 지금 vreme.setText 아래 반 환 방법이 추가 .... :

currentTime = millisUntilFinished; 

을 그리고 이전에 내 활동 범위에 선언

그 후
long currentTime; 

, 나는이 한 OnClickListener를 내 버튼 : 내 Game2 클래스의에서 onCreate 방법으로 그 후

Intent i = new Intent(Game1.this, Game2.class); 
       i.putExtra("timeCode", currentTime); 
       startActivity(i); 

를 (또한 긴 변수 선언) :

,
Bundle extras = getIntent().getExtras(); 
     if(extras !=null) { 
      currentTime = extras.getLong("timeCode"); 
     } 

그런 다음이 (그것은 단지 하나의 변화, 내 통과 변수 대신에 240000 값 GAME1 클래스에서 기본적으로 동일한 코드의) :

new MyCount(currentTime, 1000) 
    { 
     // Updates the text on your "scoreboard" every second 
     public void onTick(long millisUntilFinished) 
     { 
      vreme.setText("" + formatTime(millisUntilFinished)); 
     } 

     public void onFinish() 
     { 

     } 
    }.start(); 
} 




public class MyCount extends CountDownTimer { 
    public MyCount(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    public void onFinish() { 


    } 
    public void onTick(long millisUntilFinished) { 
     vreme.setText("" + millisUntilFinished/1000); 
    } 

하고 그것이 마치 마법처럼 작동합니다!