2016-07-25 14 views
-3

私は、アプリが閉じていてもアクティブでなくても、設定された数字が毎日減少するようにしようとしています。たとえば、5日間アプリを開かないと、アプリを開いたときに番号が5つ下になります。私はAlarmManagerを使用しようとしてきましたが、私はToastを作成し、メインアクティビティでは関数を実行しないでください。ここに私のコードは...私はAndroidスタジオで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さんに感謝しますが、私がTimerを使用していない理由は、アプリが閉じているかどうかにかかわらず。うまくいけば私の質問を編集しました。 – Mycah

+0

sharedPreferences変数を作成し、onReceiveメソッドまたはAlarmReceiverでその変数を減らします。次に、sharedPreferences変数の値を表示します。 'private int number = 100;'を設定すると、クラスがインスタンス化されるたびに変数が初期化されます。 – James

+0

sharedPreferencesを使用すると、アプリが終了してもカウントダウンできました。ありがとう!しかし、私が必要とする最後のものは、画面を更新することです。リフレッシュボタンを作ったが、ブロードキャストが発生するたびに自動的に更新されるようになったのかどうか疑問に思っていた。 – Mycah

関連する問題