2016-07-25 4 views
-3

앱이 닫히고 활성화되지 않은 경우에도 설정 수치가 매일 줄어드는 곳을 만들기 위해 노력하고 있습니다. 예를 들어 5 일 동안 앱을 열지 않으면 앱을 열 때 5 개의 숫자가 더 낮아집니다. 나는 AlarmManager를 사용하려했지만 토스트를 만들고 주 활동에서 기능을 실행하지 못하게 할 수 있습니다. 여기에 내 코드 ...Android Studio에서 AlarmManager를 사용하여 일일 카운트 다운을 만들려고합니다.

주요 활동

private TextView mTest; 
private Button mButton; 

private int number = 100; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mButton = (Button) findViewById(R.id.button); 
    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      scheduleAlarm(); 
     } 
    }); 
} 

public void scheduleAlarm(){ 
    Intent intentAlarm = new Intent(this, AlarmReceiver.class); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 100000, 100000, PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT)); 
    Toast.makeText(MainActivity.this, "This is starting!", Toast.LENGTH_SHORT).show(); 
} 

public void subtract(){ 
    mTest = (TextView) findViewById(R.id.textView); 
    number -= 1; 
    String numberString = Integer.toString(number); 
    mTest.setText(numberString); 
} 

이며, 여기에

private MainActivity mMainActivity = new MainActivity(); 

@Override 
public void onReceive(Context context, Intent intent) { 

    mMainActivity.subtract(); 
    Toast.makeText(context, "This is bogus", Toast.LENGTH_LONG).show(); 

} 
+0

현재 코드를 표시하고 문제를 해결하려고 시도합니다. –

답변

0

당신은 쉽게이 예에 따라 타이머 (https://developer.android.com/reference/java/util/Timer.html)

을 사용하여 수행 할 수있는 방송을하다 :

long MINUTE_TO_MSEC = 60000; 
long DAY_TO_MSEC = MINUTE_TO_MSEC * 60 * 24; 
Timer timer = new Timer(); 
TimerTask countdownTask = new TimerTask() { 
    public void run() { 
     /* your function goes here */ 
    } 
} 
timer.scheduleAtFixedRate(task,0,DAY_TO_MSEC); 

이것은 24 시간마다 코드를 실행합니다.

+0

응답 James에게 감사드립니다.하지만 타이머를 사용하지 않는 이유는 앱이 닫혔거나 활성화되어 있지 않아도 "카운트 다운"을 원하기 때문입니다. . 나는 더 명확하게하기 위해 나의 질문을 편집했다. – Mycah

+0

sharedReceive 메서드 나 alarmReceiver에서 sharedPreferences 변수를 만들고 감소시킵니다. 그런 다음 sharedPreferences 변수의 값을 표시하십시오. 'private int number = 100; '을 설정하면 클래스가 인스턴스화 될 때마다 변수가 초기화됩니다. – James

+0

sharedPreferences를 사용하면 앱이 종료 된 경우에도 카운트 다운에 매우 효과적입니다. 감사! 그러나 내가 필요한 마지막 것은 화면을 업데이트하는 것입니다. 새로 고침 버튼을 만들었지 만, 어쨌든 브로드 캐스트가 발생할 때마다 자동으로 업데이트되도록해야하는지 궁금합니다. – Mycah