2016-05-17 44 views
1

我所有的代碼是在計時器,它狄每2秒Android手機上保持沉默的時間比較

我有3周不同的時間

1)從時間選擇器(sTime)。
2)獲取我手機的當前時間(cTime)。
3)到期時間 - (用於創建時間選擇器的時間和到期時間之間的範圍)(rTime)。

我想我的無聲手機時cTime等於或sTime 後回頭我的手機輪廓正常時cTime等於或之後rTime

,但我不能做到這一點。我已經完成了我的編碼,我認爲邏輯很好,但爲什麼它不工作。請在這方面幫助我。

這裏是我的代碼

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

我沒有看到這部分代碼的問題。請顯示計時器滴答代碼? – Konstantin

+0

上面的代碼是在名爲timeCheck(int sHour,int sMin) 的函數裏面,我剛剛調用了timeCheck()函數。定時器工作完美,因爲我通過在logcat中顯示值來測試它。但它不會改變電話的狀態,即靜音和正常模式。 – Imran

+0

嘗試更改am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); am.setRingerMode(AudioManager.RINGER_MODE_SILENT);並將添加到清單 – Konstantin

回答

1

好吧,我有一個建議。 Date類的'after'方法以毫秒爲單位比較兩個long值。當你獲得當前時間的毫秒值時,它計算爲當前年份+當前月份+當前日期和時間等(或類似的東西)。當你得到毫秒的時間時,它會計算錯誤,因爲你沒有指定完整的日期(年份等)。我的意思是說,當它在Date.after方法中以毫秒爲單位進行轉換時,startTime不正確。嘗試改變你的算法工作機智長時間戳,而不是與日期。例如當前時間是System.currentTimeMillis()。我希望它有幫助。對不起,我的英語

+0

嘿,我已經認爲這可能是問題,因爲它給了我現在的時間與1970年。但我無法解決這個問題,以獲得準確的時間。你能爲我編一個簡單的例子嗎?這將是非常好的你,對我很有幫助。 – Imran

0

好吧,嘗試使用這樣的:

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