Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在设置通知时间的同时会引发通知?_Java_Android_Time_Alarmmanager_Android Notifications - Fatal编程技术网

Java 为什么在设置通知时间的同时会引发通知?

Java 为什么在设置通知时间的同时会引发通知?,java,android,time,alarmmanager,android-notifications,Java,Android,Time,Alarmmanager,Android Notifications,我使用时间选择器设置用户通知的时间。我使用过报警管理器和通知生成器 我已经在按钮的clickListener上调用了setAlarm方法来保存数据。因此,当调用此setAlarm方法时,通知将在用户设置的时间同时发出 我不希望在保存数据时引发它 谁能告诉我为什么会这样 设置报警方法 @SuppressLint("NewApi") private void setAlarm(Calendar targetmCalen) { AlarmManager alarmMgr; Pendi

我使用时间选择器设置用户通知的时间。我使用过报警管理器和通知生成器

我已经在按钮的clickListener上调用了setAlarm方法来保存数据。因此,当调用此setAlarm方法时,通知将在用户设置的时间同时发出

我不希望在保存数据时引发它

谁能告诉我为什么会这样

设置报警方法

@SuppressLint("NewApi")
private void setAlarm(Calendar targetmCalen) {

    AlarmManager alarmMgr;
    PendingIntent alarmIntent;
    alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(getApplicationContext(), NotificationReceiver.class);
    alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
    Toast.makeText(getBaseContext(),
            "call alarmManager.setExact()",
            Toast.LENGTH_LONG).show();

    intent.putExtra("title",eventTitle);


    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, targetmCalen.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, alarmIntent);

    ComponentName receiver = new ComponentName(getApplicationContext(),NotificationReceiver.class);
    PackageManager pm = getApplicationContext().getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);

}
通知接收者

public class NotificationReceiver  extends BroadcastReceiver {


    private static final int MY_NOTIFICATION_ID = 0;
    NotificationManager notificationManager;
    Notification myNotification;

    EventTableHelper db;

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


        Toast.makeText(context, "Time is set", Toast.LENGTH_LONG).show();

        db = new EventTableHelper(context);

        List<EventData> testSavings = db.getAllEvents();

        for (EventData ts : testSavings) {
            String log = "from date:" + ts.getFromDate()
                    + " ,to date: " + ts.getToDate()
                    + " ,location: " + ts.getLocation()
                    + " ,title " + ts.getTitle();

            Date date = new Date();
            Date date1 = new Date();
            Log.d("Result: ", log);

            SimpleDateFormat df = new SimpleDateFormat("E MMM dd HH:mm:ss zzzz yyyy");
            SimpleDateFormat df2 = new SimpleDateFormat("HH:mm a");

            try {
                date = df.parse(ts.getFromDate());
                date1 = df.parse(ts.getToDate());
            } catch (ParseException ex) {

            }
            String timeFrom = df2.format(date);
            String startTime = String.valueOf(timeFrom);

            String timeTo = df2.format(date1);
            String endTime = String.valueOf(timeTo);


            String location = ts.getLocation();
            String title = ts.getTitle();


            Intent myIntent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(
                    context,
                    0,
                    myIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

            if(location.equals(""))
            {
                String msg = "From : " + startTime + "\nTo : " + endTime;

                myNotification = new NotificationCompat.Builder(context)
                        .setContentTitle("Event : " + title)
                        .setContentText(msg)
                        .setWhen(System.currentTimeMillis())
                        .setContentIntent(pendingIntent)
                        .setAutoCancel(true)
                        .setSmallIcon(R.drawable.eventicon)
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
                        .setDefaults(Notification.DEFAULT_SOUND)
                        .build();

            }

            else
            {
                String msg = "From : " + startTime + "\nTo : " + endTime + "\nAt : " + location;
                myNotification = new NotificationCompat.Builder(context)
                        .setContentTitle("Event : " + title)
                        .setContentText(msg)
                        .setWhen(System.currentTimeMillis())
                        .setContentIntent(pendingIntent)
                        .setAutoCancel(true)
                        .setSmallIcon(R.drawable.eventicon)
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
                        .setDefaults(Notification.DEFAULT_SOUND)
                        .build();

            }

            Log.i("Notify", "Notification");
            notificationManager =
                    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(MY_NOTIFICATION_ID, myNotification);

        }
    }
}

谢谢。

如果您在设置报警时报警,则表示您在过去给了它一个日期/时间。否。我没有。每当我点击save(保存)按钮时,就会触发警报。请检查编辑后的问题:@Mike MJust现在我已经添加了,在添加星期几之前,问题是相同的。“减去星期几做什么?”-我的意思是删除该行。这导致当天被重置为本月的第一个星期一,也就是两天前。“在事件发生10分钟前报警怎么样?”-在您尝试创建复杂的时间表之前,您应该先让一个简单的报警生效。
Calendar object Passed in setAlarm method

     c.set(Calendar.HOUR_OF_DAY, hour);
            c.set(Calendar.MINUTE, minute);
            c.set(Calendar.SECOND,0);
            c.set(Calendar.MILLISECOND,0);
            c.set(Calendar.DATE, day);
            c.set(Calendar.DAY_OF_WEEK,2);
            notification = c.getTime();
            notificationTime = df.format(notification);
            Toast.makeText(getApplicationContext(),notificationTime,Toast.LENGTH_SHORT).show();