2013-03-28 42 views
4

我做的報警項目一次報警,如何設置的android

我想設置一個時間報警。但我面臨的問題設置針鋒相對,

我的代碼;

public void loadCalender(String month) { 

    try { 

     Cursor cursor = null; 

     Database db = new Database(getApplicationContext()); 

     cursor = db.getSelectedCalenderDetails(month); 
     if (cursor.getCount() != 0) { 
      if (cursor.moveToFirst()) { 
       do { 
        String text = cursor.getString(cursor 
          .getColumnIndex("event")); 
        String title = "News/Events"; 
        String dates = cursor.getString(cursor 
          .getColumnIndex("date")); 

        String yr = dates.substring(0, 4); 
        int year = Integer.parseInt(yr); 
        String mon = dates.substring(5); 
        String mo = mon.substring(0, 2); 
        int months = Integer.parseInt(mo); 
        String da = dates.substring(9); 
        int day = Integer.parseInt(da); 

        // Ask our service to set an alarm for that date, 
        // this 
        // activity talks to the client that talks to the 
        // service 
        set_alarm(year, months, day, title, text); 
        System.out.println(dates); 

       } while (cursor.moveToNext()); 

      } 

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

    // looping through All Contacts 

} 


public void set_alarm(int year, int month, int day, String title, 
     String text) { 
    SharedPreferences prefs = PreferenceManager 
      .getDefaultSharedPreferences(getApplicationContext()); 

    // etc 
    Calendar cal = Calendar.getInstance(); 
    int hour = prefs.getInt("PREF_HOUR", 0); 
    int min = prefs.getInt("PREF_MIN", 0); 
    if(hour == 0 && min == 0){ 


    cal.set(Calendar.MONTH, month - 1); 
    cal.set(Calendar.YEAR, year); 
    cal.set(Calendar.DAY_OF_MONTH, 7); 

    cal.set(Calendar.HOUR_OF_DAY, 15); 
    cal.set(Calendar.MINUTE, min); 
    }else 
    { 

     cal.set(Calendar.MONTH, month - 1); 
     cal.set(Calendar.YEAR, year); 
     cal.set(Calendar.DAY_OF_MONTH, hour); 

     cal.set(Calendar.HOUR_OF_DAY, min); 
     cal.set(Calendar.MINUTE, min); 
    } 
    Intent intent = new Intent(getApplicationContext(), AlarmActivity.class); 
    intent.putExtra("title", title); 
    intent.putExtra("text", text); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
      getApplicationContext(), 1, intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    AlarmManager alarmManager = (AlarmManager) getApplicationContext() 
      .getSystemService(getApplicationContext().ALARM_SERVICE); 

    /* 
    * alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
    * pendingIntent); 
    */ 

    alarmManager.cancel(pendingIntent); // cancel any existing alarms 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, 

      pendingIntent); 
} 

這裏警報推動始終處於啓用狀態,應用程序打開時...

笏錯誤做了我在我的代碼做.. plz幫助我設定一個時間報警

在此先感謝

回答

9

你需要使用setAlarm()方法代替setRepeating()

alarmManager.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pendingIntent); 
+0

我還需要處理設備的啓動嗎?或者即使在設備重新啓動後它仍能工作?如果它應該被調用,但是該設備已關閉(例如沒有電池),現在該設備已打開? – 2016-03-17 09:35:02

+0

@androiddeveloper你不必擔心設備啓動。 RTC方法將鬧鐘設置爲特定時間。所以如果手機在那段時間沒有運行,那麼下次手機啓動時會觸發鬧鐘。 – Senhor 2016-08-12 17:35:08

+0

@Senhor我明白了。時間變化的情況如何(例如「夏令時」)?如果我將它設置爲在X上報警,但在X之前,國家會將X更改爲X + 1,然後X會上升。這意味着整個小時都被跳過了。它會對鬧鐘做什麼? – 2016-08-12 23:32:29

3

而不是使用alarmManager.setRepeating使用alarmManager.set設置一個時間報警

5

怎麼樣,我使用

alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 

,我想通過alarmMenager 它的工作原理,而應用程序仍在運行,以推送通知的未來,而我叫allarm MENAGER設置通知futer和關閉應用程序我的通知沒有顯示。 我需要做什麼?

這裏你長了我的事件發送:

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR, HOUR_OF_DAY); 
cal.set(Calendar.MINUTE, MINUTE); 
//cal.add(Calendar.SECOND, SECOND_OF_DAY); 
Intent intent = new Intent(UnityPlayer.currentActivity, TimeAlarm.class); 
intent.putExtra("alarm_status", statusMessage); 
intent.putExtra("alarm_title", title); 
intent.putExtra("alarm_content", content); 
Log.i("SenderEvent ", "przygotowane dane"); 
PendingIntent sender = PendingIntent.getBroadcast(UnityPlayer.currentActivity.getApplicationContext(), REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 

而且Reciever:

Bundle bundle = intent.getExtras(); 
     String statusMessage = bundle.getString("alarm_status"); 
     String title = bundle.getString("alarm_title"); 
     String content = bundle.getString("alarm_content"); 
     nm = (NotificationManager) context 
       .getSystemService(Context.NOTIFICATION_SERVICE); 
     PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
       new Intent(), 0); 
Notification notif =new Notification();//R.drawable.ic_launcher,statusMessage, System.currentTimeMillis());; 
     //notif.largeIcon = bitmap; 
     notif.icon =2130837504; 
     notif.tickerText=statusMessage; 
     notif.when= System.currentTimeMillis(); 
     /* 
     new Notification(0, 
       statusMessage, System.currentTimeMillis());*/ 
     notif.setLatestEventInfo(context, title, content, contentIntent); 
     nm.notify(NOTIFY_ME_ID, notif); 

哪些錯誤與推通知,並在未來,而應用程序是關門?