2016-07-25 9 views
-3

zu erstellen Ich versuche, etwas zu machen, wo eine bestimmte Anzahl wird jeden Tag abnehmen, auch wenn die App geschlossen ist, und nicht aktiv. Zum Beispiel, wenn Sie die App für 5 Tage nicht öffnen, wenn Sie es öffnen, wird die Nummer 5 Nummern niedriger sein. Ich habe versucht, AlarmManager zu verwenden, aber ich kann nur einen Toast erstellen und keine Funktion in der Hauptaktivität ausführen. Hier ist mein Code ...Ich versuche, einen täglichen Countdown mit AlarmManager in Android Studios

Hauptaktivität

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

und hier ist die Sendung

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

zeigen Sie Ihren aktuellen Code und versucht, das Problem zu beheben –

Antwort

0

Sie leicht erreichen können, dies mit Hilfe einer Zeitschaltuhr (https://developer.android.com/reference/java/util/Timer.html)

Folgen Sie diesem Beispiel :

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

Dadurch wird Ihr Code alle 24 Stunden ausgeführt.

+0

Danke für die Antwort James, aber der Grund, warum ich keinen Timer verwende, ist, weil ich die "Countdown" passieren soll, selbst wenn die App geschlossen oder nicht aktiv ist . Ich habe meine Frage bearbeitet, um sie hoffentlich klarer zu machen. – Mycah

+0

Erstellen Sie eine sharedPreferences-Variable und dekrementieren Sie diese in der onReceive-Methode oder Ihrem AlarmReceiver. Zeigen Sie dann den Wert der Variablen sharedPreferences an. Durch die Einstellung 'private int number = 100;' wird die Variable jedes Mal initialisiert, wenn die Klasse instanziiert wird. – James

+0

Die Verwendung der sharedPreferences funktionierte hervorragend zum Herunterzählen, selbst wenn die App geschlossen ist! Vielen Dank! Das Letzte, was ich brauche, ist jedoch, dass der Bildschirm aktualisiert wird. Ich habe eine Refresh-Taste gedrückt, die funktioniert, aber ich habe mich gefragt, ob es trotzdem eine Aktualisierung gab, die jedes Mal automatisch durchgeführt wurde. – Mycah

Verwandte Themen