2016-05-17 14 views
1

alle mein Code in Timer und alle Tik 2 SekundenAndroid Phone Stille auf Zeitvergleich

Ich habe 3 verschiedenen Zeiten

1) Zeit von der Zeitauswahl (sTime).
2) Holen Sie sich die aktuelle Uhrzeit meines Telefons (cTime).
3) Verfallszeit - (zum Erstellen eines Bereichs zwischen Zeitpunktzeit und Ablaufzeit) (rTime).

Ich möchte schweigen mein Handy, wenn cTime gleich oder nach sTime und drehe den Telefon-Profil wieder normal, wenn cTime gleich oder nach rTime

aber ich dies nicht erreichen können. Ich habe meine Programmierung gemacht und ich denke, Logik ist in Ordnung, aber warum es nicht funktioniert. Bitte helfen Sie mir in dieser Hinsicht.

Hier ist mein Code

AudioManager am; 
am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE); 

try { 
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 

    String savedTime = sHour + ":" + sMin; 
    Date sTime = sdf.parse(savedTime); 

    Calendar c = Calendar.getInstance(); 
    int currentHour = c.get(Calendar.HOUR); 
    int currentMin = c.get(Calendar.MINUTE); 
    String currentTime = currentHour + ":" + currentMin; 

    Date cTime = sdf.parse(currentTime); 

    int rangeHour = sHour; 
    int rangeMin = sMin + 1; 

    Date rTime = sdf.parse(rangeHour + ":" + rangeMin); 

    if (cTime.after(sTime)) { 
     am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 
     Log.e("res", "Silent Mode Timing"); 
    } 

    if (cTime.after(rTime)) { 
     am.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
     Log.e("res", "Normal Mode Timing"); 
    } 
} catch (Exception ex) { 
    Log.e("res", ex.toString()); 
} 
+0

Ich sehe nicht Problem in diesem Teil des Codes. Bitte zeigen Sie den Timer-Tick-Code an? – Konstantin

+0

der obige Code ist in der Funktion namens timeCheck (int sHour, int sMin) innerhalb des Timers habe ich gerade die timeCheck() -Funktion aufgerufen. Timer funktioniert perfekt, als ich es getestet habe, indem ich den Wert in logcat angezeigt habe. aber es ändert nicht den Zustand des Telefons, d.h. stiller und normaler Modus. – Imran

+0

versuchen, ändern am.setRingerMode (AudioManager.RINGER_MODE_VIBRATE); zu am.setRingerMode (AudioManager.RINGER_MODE_SILENT); und fügen Sie in das Manifest – Konstantin

Antwort

1

Ok, ich habe einen Vorschlag. Die Methode 'after' der Date-Klasse vergleicht zwei lange Werte in Millisekunden. Wenn Sie den aktuellen Zeitwert in Millisekunden erhalten, wird er als aktuelles Jahr + aktueller Monat + aktueller Tag und Stunde usw. berechnet (oder so ähnlich). Und wenn Sie Millisekunden von savedTime erhalten, berechnet es inkorrekt, weil Sie kein vollständiges Datum (Jahr usw.) angeben. Ich meine, dass startTime falsch ist, wenn es in langen Millisekunden Wert in Date.after Methode konvertiert. Versuchen Sie, Ihren Algorithmus so zu ändern, dass er mit einem langen Zeitstempel arbeitet, nicht mit Datum. Zum Beispiel ist die aktuelle Uhrzeit System.currentTimeMillis(). Ich hoffe es hilft. Sorry für mein Englisch

+0

Hey ich dachte schon, das könnte das Problem sein, denn es gab mir die aktuelle Zeit mit dem Jahr 1970. aber ich kann dieses Problem nicht lösen, um es zur genauen Zeit zu bekommen. kannst du bitte ein einfaches Beispiel für mich kodieren. es wäre sehr nett von dir und sehr hilfreich für mich. – Imran

0

Ok, versuchen, etwas zu verwenden:

private void compareTime(final String year, final String day, final String hour, final String month, final String minutes) { 
    AudioManager am; 
    am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE); 
    final SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:dd:mm:yy"); 
    final String savedTimeValue = hour + ":" + minutes + ":" + day + ":" + month + ":" + year; 
    try { 
     final Date savedDate = sdf.parse(savedTimeValue); 
     final long savedTime = savedDate.getTime(); 
     final long currentTime = System.currentTimeMillis(); 
     final long rangeTimeMilliseconds = 1 * 60 * 1000; // 1 minute in milliseconds 
     if (currentTime > savedTime) { 
      am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 
     } 
     if (currentTime > rangeTimeMilliseconds) { 
      am.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
     } 

    }catch(Exception e) { 
     e.printStackTrace(); 
    } 
}