2013-08-29 68 views
0
Date dat = new Date(); 

Calendar cal_alarm = Calendar.getInstance(); 
Calendar cal_now = Calendar.getInstance(); 
cal_alarm.setTime(dat); 
cal_alarm.set(Calendar.HOUR_OF_DAY, hrs);// set the alarm time 
cal_alarm.set(Calendar.MINUTE, min); 
cal_alarm.set(Calendar.SECOND, 0); 
cal_alarm.set(Calendar.MILLISECOND, 0); 
if (cal_alarm.before(cal_now)) {// if its in the past increment 
    cal_alarm.add(Calendar.DATE, 1); 
} 
Intent intent = new Intent(ctx, AlarmReceiver.class); 
// intent.putExtra("Reminder to Take Photo", "Pixitch!"); 
PendingIntent sender = PendingIntent.getBroadcast(ctx, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
// Get the AlarmManager service 
Long tmemills = cal_alarm.getTimeInMillis(); 

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, tmemills,AlarmManager.INTERVAL_DAY, sender); 

传递值详细是calender.getTimeInMillis()未设定正确

当前时间是:16:07 小时= 16 分钟= 10

tmemills即将1377772800393

我无法找到问题出在哪里 因为我是A的初学者ndroid。 请帮我

+0

1377772800393有什么问题? – flx

+0

从16:07到16:10差距大约是180000毫秒,但它显示1377772800393 – Viresh

+0

http://stackoverflow.com/a/16220883/1777090检查它 –

回答

0

请此

long tmemills = cal_alarm.getTimeInMillis() - cal_now.getTimeInMillis(); 

am.setRepeating(AlarmManager.RTC_WAKEUP,tmemills + System.currentTimeMillis(),AlarmManager.INTERVAL_DAY, sender); 
0

cal_alarm.getTimeInMillis()给你从1970年1月1日午夜起的毫秒数。这不是你的两个日期之间的差异。

得到的差异,减去cal_now.getTimeInMillis()这样的:

long tmemills = cal_alarm.getTimeInMillis() - cal_now.getTimeInMillis(); 
+1

有没有听说过Java运营商:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html – Henry

+0

谢谢@Henry价值是完美的但阿拉拉姆正在运行immidiatly ...请任何建议? – Viresh

0

如果你想两个时间之间的区别,你可以使用这个::

Date date1 = cal.getTime(); String endTime = "2013/29/08 18:59:59"; SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy/dd/MM HH:mm:ss"); Date dtEndTime = dateFormat.parse(endTime); DecimalFormat formatter = new DecimalFormat("###,###"); long diff = dtEndTime.getTime() - date1.getTime();

差异会给你以毫秒为单位的差异。

此外,值cal_alarm.getTimeInMillis()将以毫秒为单位给出日期的值,它不会给出两个日期的差异。

+0

尊敬的来自long tmemills的@Ritaban = cal_alarm.getTimeInMillis() - cal_now.getTimeInMillis();价值来临正确,但阿拉姆经理正在开立immidiatly :( – Viresh

0

我用下面的代码为喜欢它helps.`public类AlarmManagerActivity延伸活动{ 的PendingIntent PI的alarm..hope创建一些; BroadcastReceiver br; AlarmManager am; final static private long ONE_SECOND = 1000; final static private long Five_SECONDS = ONE_SECOND * 5;

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    setup(); 
    findViewById(R.id.tv).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 
        Five_SECONDS, pi); 
     }  });  

}  
@Override 
protected void onDestroy() { 
     am.cancel(pi); 
     unregisterReceiver(br); 
     super.onDestroy(); 
}  
private void setup() { 
    br = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context c, Intent i) { 
        Toast.makeText(c, "Rise and Shine!", Toast.LENGTH_LONG).show(); 
        } 
      }; 
    registerReceiver(br, new IntentFilter("abc")); 
    pi = PendingIntent.getBroadcast(this, 0, new Intent("abc"), 

0); am =(AlarmManager)(this.getSystemService(Context.ALARM_SERVICE)); }}`