2013-10-20 69 views
0

我已經嘗試過這個代碼在3月份第一次報警。 但它不起作用。 我該如何解決這個問題? APP的如何在Alarmmanger上設置日期?

內容


當我們按下按鈕(CLICK1),如果是3月第一,Alarmmanger調用的意圖。 所以這個應用程序打印新的活動。


ERROR


當我們按下按鈕(CLICK1),然後隨時調用Alarmmanger意圖。


如何解決?

- 抱歉對於我的不好英語..ㅠㅠ

public class MainActivity extends Activity { 

private AlarmManager alarm; 

private NotificationManager notification; 
Calendar calendar = Calendar.getInstance(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);} 
    public void click1(View v) { 
    notification = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Calendar cal = new GregorianCalendar(); 
    cal.setTimeInMillis(System.currentTimeMillis()); 


    calendar.clear(); 
    calendar.set(cal.YEAR,3,1); 


    setAlarm(); 
    } 



private void setAlarm(){ 

alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent()); 


} 
private PendingIntent pendingIntent() { 
    // TODO Auto-generated method stub 
    Intent i = new Intent(getApplicationContext(), MainActivity.class); 
    PendingIntent p = PendingIntent.getActivity(this, 0, i, 0); 
    return p; 

} 
+0

這可能不是你的問題,但三月值是2的錯誤使用日曆常量,在這種情況下'Calendar.MARCH' – ramaral

回答

0

您鴕鳥政策只需要創建另一個日曆獲得的實際年。
當你問日曆的一個新實例,將與實際日期和時間 初始化試試這個:

Calendar calendar = Calendar.getInstance(); 
int year = calendar.get(Calendar.YEAR); 
calendar.set(year,Calendar.MARCH,1); 

的另一件事,如果將告警設置成過去的時間,報警總是會走吧。

+0

我已經嘗試過了爲了避免這種類型的,但它並沒有像以前那樣工作。 – user2899769

+0

它不起作用?編輯你的問題,並嘗試更好地解釋問題 – ramaral

+0

哦!我錯過了最後一句話! – user2899769

0

TL;博士

LocalDate.of(2016 , Month.MARCH , 1).atStartOfDay(ZoneId.of("America/Montreal")).toInstant().toEpochMilli() 

避免舊日期,時間類

您使用麻煩的舊傳統的日期時間類。現在由java.time類取代。

LocalDate

LocalDate類表示沒有時間一天和不同時區的日期,唯一的價值。

LocalDate ld = LocalDate.of(2016 , Month.MARCH , 1); 

您可以通過一些替代的Month枚舉對象,三立1-12編號爲1月至12月合約。

時區

對於鬧鐘我們需要一個時間段。你可以得到一天的第一時刻。這通常是00:00:00時間,但並非總是由於夏令時(DST)或其他異常情況。讓java.time確定時間。

時區是在確定的日期是至關重要的。對於任何特定的時刻,日期因地區而異。例如,巴黎午夜過後的幾分鐘,法國是一個新的一天,而在魁北克蒙特利爾仍然是「昨天」。

ZonedDateTime

套用ZoneId獲得ZonedDateTime

ZoneId z = ZoneId.of("America/Montreal") ; 
ZonedDateTime zdt = ld.atStartOfDay(z) ; 

如果報警庫需要這一刻被表示爲自1970年以來UTC開始的毫秒爲單位的計數,詢問從提取Instant對象long整數。

long millisecondsSinceEpoch = zdt.toInstant().toEpochMilli() ; 

關於java.time

java.time框架是建立在Java 8和更高版本。這些課程取代了老的麻煩日期時間課程,如java.util.Date,.Calendar,& java.text.SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。

大部分的java.time功能後移植到Java 6 和ThreeTenABP還適於Android(見How to use…)。

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。你可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuarter,等等。

相關問題