我的报警经理在错误的时间工作的原因

问题描述 投票:0回答:1

我是编码和android工作室的新手。现在我正在尝试在android上建立一个卡路里计数器。我尝试每天早上12点(晚上11:59)推送数据,但是每次我在11:59之后强制关闭应用程序并返回到应用程序(活动)时,数据将再次被推送。我在youtube,stackoverflow和github上看到很多教程。但我没有自动找到一个活动的(onCreate()),所以我需要在这里问。这是我的代码。

main activity.Java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_status_body);

        //some code
        //some code

        Calendar calendarGo = Calendar.getInstance();
        calendarGo.set(
                calendarGo.get(Calendar.YEAR),
                calendarGo.get(Calendar.MONTH),
                calendarGo.get(Calendar.DAY_OF_MONTH),
                23,  59, 59);
        setAlarm(calendarGo.getTimeInMillis());

        // some code
        // some code

        }

        private void setAlarm(long time){
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, BroadCastReceiverTester.class);
        Intent intent1 = new Intent(this, mainActivity.class);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1321, intent, 0);


        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,time,AlarmManager.INTERVAL_DAY, pendingIntent);
        }

broadcast receiver tester.Java

 public class BroadCastReceiverTester extends BroadcastReceiver {

 @Override
     public void onReceive(Context context, Intent intent) {
     // some code
     // some code 

 activity activity = new activity(activity_id, activity_name, 
 activity_minutes_perfomed, activity_calories_burned,
 activity_date);

 databaseReferenceActivity.child(activity_id).setValue(activity);    
 }

我想说的是,我希望BroadCastReceiver仅在我设置的时候运行(即23:59:59),但每次onCreate启动时,现实总是有效。谢谢

android broadcastreceiver alarmmanager
1个回答
0
投票

如果你想每天在12:00,你需要做的是设置如下警报:Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 12);

然后像这样设置警报:

alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
© www.soinside.com 2019 - 2024. All rights reserved.