2017-03-27 3 views
2

Hier ist ein Beispiel, ich mag eine Schaltfläche in meiner App aktivieren zu können, für eine begrenzte Zeit (lasst sie 30 Minuten sagen), nach einer Benutzeraktion. Nach 30 Minuten wird diese Schaltfläche wieder deaktiviert. Was wäre der beste Weg, dies in Android zu erreichen?Zustimmtaster für eine begrenzte Zeit in android app

Da der Benutzer Gerät neu zu starten oder die App zu schließen, kann ich nicht einfach eine countdowntimer verwenden. Trotzdem, da es ein bestimmtes Start-End-Datum für den Zeitraum gibt, kann ich einfach die aktuelle Zeit überprüfen und sehen, wie der Status der Schaltfläche aussehen sollte. Der Benutzer könnte jedoch das Datum des Telefons einfach mit 15 Minuten zurückstellen, damit die Schaltfläche weiterhin aktiviert wird.

+0

Haben Sie alarmmanager versucht? – Okas

+0

Sie können die Zeit des letzten durchgeführten Prozesses speichern und dann mit der aktuellen Zeit (DATETIME) vergleichen. –

+0

@AmitVaghela können wir MVP dafür verwenden? –

Antwort

0

Normalfall

  • Knopf wird sichtbar
    1. speichern Zeitstempel und Zeitzone info in gemeinsamen Vorlieben
    2. Start AlarmManager , die aktiviert wird, freigegebene Einstellungen löscht und den Status der Schaltfläche deaktiviert.

Fall, wenn der Benutzer schließt und öffnet die App

  • Knopf wird sichtbar
    1. Alle vorherigen Schritte und jedes Mal App wird Öffnen Sie den Unterschied zwischen dem Wert in der gemeinsamen Präferenz (falls vorhanden) und der aktuellen Zeit, abhängig davon, ob die Schaltfläche angezeigt wird.

Fall, wenn Änderungen Benutzer Zeit

  • Knopf wird sichtbar
    1. Alle vorherigen Schritte und für die Zeitänderungsereignisse in das Register AndroidManifest (see how) und führen Sie die erforderliche Aktion an die SharedPreferences aus, je nachdem wie viel Zeit geändert wurde.

Selbstverständlich, wenn Benutzer der App-Daten diese Technik löscht nutzlos ist, müssen Sie mit Back-End-Synchronisierung durchführen (Firebase Database vielleicht ??).

1

Sie können jede Minute einen Countdown-Timer verwenden und diesen Fortschritt dann in einer Konfigurationsdatei speichern. Wenn der Benutzer 30 Minuten hat, können Sie die Schaltfläche deaktivieren. Sie können eine Konfigurationsdatei in den internen Ordner der App schreiben, den der Benutzer nicht berühren kann. Wenn der Benutzer die App über 7 Minuten schließt, sind in der Konfigurationsdatei diese 7 Minuten vorhanden. Und wenn der Benutzer die phon Datum setzen sich zurück egal;)

0

Speichern Sie in den Einstellungen Startzeit mit System.currentTimeMillis() und überprüfen Sie jedes Mal, ob die aktuelle Zeit (gleich System.currentTimeMillis()) 30 Minuten überschritten hat.

0

Verwenden Sie den folgenden Code, um die Taste für 30 Minuten zu deaktivieren. btn.setEnabled (false);

neuen Thread (neu Runnable() {

 @Override 
     public void run() { 
      try { 
       Thread.sleep(1800000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      LoginActivity.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        btn.setEnabled(true); 

       } 
      }); 
     } 
    }).start(); 
1

Hier ist das Beste für Sie zu tun ist, einen Countdown-Timer zu verwenden, die den Fortschritt Ihrer Taste aktivieren Zeit im PreferenceHelper schreibt. definieren ein Intervall sagen vielleicht 30 Sekunden oder 1 Minute und sobald diese Countdown-Timer Feuer als Benutzer Aktion beendet.

nach jeder 30 Sekunden oder nach jeder 1 min nach gewähltem Intervall Update je der Wert bevorzugt Helfer.

Beispiel mit 1 min Aktualisierungsintervall

public void updateButtonDisableTimer(){ 
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 

int oldTimerValue = sharedpreferences.getInt("key", 0); // is the default value in case no value is found. 
Editor editor = sharedpreferences.edit(); 
if(oldTimerValue > 30){ 
    //this the case when you need to stop the timer 
    editor.putInt("key", 0); 
    //Write code to disable the button 
}else{ 
    int newValue = oldTimerValue + 1; //1 min is interval 
    editor.putInt("key", newValue); 
} 
editor.commit(); 
} 

Diese schließen bei App funktioniert und alle anderen Szenario. Es kann nur fehlschlagen, wenn Sie die Daten löschen. Hoffe, es funktioniert :)

2

Sie können Handler Post Delayed-Methode verwenden. Siehe unten-

//when use press button 
    new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       //disable your button here 
      } 
     }, 3*1000); //your delay time 

Ich hoffe, es hilft.

0

OnClick of Button speichern aktuelle Zeit in sharedPreference. Wenn Sie zurückgekommen sind, überprüfen Sie die Differenz zwischen der aktuellen Zeit und der sharedPref-Zeit. Wenn es länger als 30 Minuten ist, dann aktivieren Sie es andernfalls war es deaktiviert. Für die ersten sharedPreference Werte Taste zu diesem Zeitpunkt

1

null ermöglichen gegeben, dass es ein bestimmtes Zeitintervall Start-Enddatum, kann ich einfach überprüfen gegen die aktuelle Zeit und sehen, was der Zustand der Taste sollte sein. Der Benutzer könnte jedoch einfach das Datum des Telefons zurück mit 15 Minuten setzen, so dass die Schaltfläche weiterhin aktiviert wäre.

Um dies zu vermeiden, stellen Sie eine AlarmManager

Da der Benutzer Gerät neu zu starten oder die App

eine App schließen Schließen keine Auswirkungen auf Alarmmanager nicht hat, sobald es festlegt. Neustart tut jedoch. Es gibt ways von AlarmManager neu zu erstellen. Kurz gesagt, Sie müssen den AlarmManager erneut erstellen. Aber es hat keine Ahnung, zu welcher Zeit es vorher eingestellt wurde. Eine Möglichkeit, dies zu erreichen, besteht darin, die Zeit gemeinsam mit dem AlarmManager zu speichern. Jetzt können Sie den AlarmManager so oft auslösen, wie Sie möchten, da Sie die Zielzeit kennen.

Sobald der AlarmManager ausgelöst wird, aktivieren/deaktivieren Sie einfach die betreffende Schaltfläche aus der Aktivität/Service, die zur Verfügung gestellt wird.

0

I ths Problem auf folgende Weise apprach würde: Diese Tätigkeit ist

  1. Bei Aktivierung der Taste, speichern Sie die aktuelle Uhrzeit in dem hinteren Ende (zusammen mit einigen indentifier für das Gerät)
  2. Der nächste Mal angezeigt, Lesen aus dem DB
  3. Vergleichen Sie die gespeicherte Uhrzeit und die aktuelle Uhrzeit.
  4. Einfache Bedingung, um festzustellen, ob die Schaltfläche aktiviert werden soll oder nicht.
Verwandte Themen