Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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
Android 根据EditText中的日期和时间选择器显示通知_Android_Notifications_Alarmmanager - Fatal编程技术网

Android 根据EditText中的日期和时间选择器显示通知

Android 根据EditText中的日期和时间选择器显示通知,android,notifications,alarmmanager,Android,Notifications,Alarmmanager,我是android studio的新手,希望为用户指定的特定时间创建一个通知调度程序 然而,日期和时间对话框从EditText中选择,我设置了按钮来获取时间并按下通知。我被“设置”按钮上应该写的代码卡住了 case R.id.setBtn: // stuck at here....// String text = dateTimeIn.getText().toString().trim(); if (

我是android studio的新手,希望为用户指定的特定时间创建一个通知调度程序

然而,日期和时间对话框从EditText中选择,我设置了按钮来获取时间并按下通知。我被“设置”按钮上应该写的代码卡住了

            case R.id.setBtn:

// stuck at here....//


                String text = dateTimeIn.getText().toString().trim();

                if (text.isEmpty()) {
                    Toast.makeText(this, "Please select date and time", Toast.LENGTH_SHORT).show();
                } else {
                    dateTimeIn.getText().toString().trim();
                    Toast.makeText(this, "Done!", Toast.LENGTH_SHORT).show();
                }


                break;

            case R.id.cancelBtn:
                alarmManager.cancel(alarmIntent);
                Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
                break;
这是我的全部代码


    private int notificationId = 1;

    EditText dateTimeIn;

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

        findViewById(R.id.setBtn).setOnClickListener(this);
        findViewById(R.id.cancelBtn).setOnClickListener(this);

        dateTimeIn = findViewById(R.id.dateTimeInput);

        dateTimeIn.setInputType(InputType.TYPE_NULL);


        dateTimeIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showDateTimeDialog(dateTimeIn);
            }
        });

    }

    private void showDateTimeDialog(final EditText dateTimeIn) {

        final Calendar calendar=Calendar.getInstance();
        DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

                calendar.set(Calendar.YEAR, year);
                calendar.set(Calendar.MONTH, month);
                calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

                TimePickerDialog.OnTimeSetListener timeSetListener=new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

                        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                        calendar.set(Calendar.MINUTE, minute);

                        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd-MM-yy HH:mm");
                        dateTimeIn.setText(simpleDateFormat.format(calendar.getTime()));

                    }
                };

                new TimePickerDialog(JadwalWc.this,timeSetListener,calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE),false).show();

            }
        };
        new DatePickerDialog(JadwalWc.this,dateSetListener,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();
    }

    @Override
    public void onClick(View view) {

        EditText editText = findViewById(R.id.editText);
        EditText dateTimeIn = findViewById(R.id.dateTimeInput);


        Intent intent = new Intent(JadwalWc.this, AlarmReceiver.class);
        intent.putExtra("notificationId", notificationId);
        intent.putExtra("message", editText.getText().toString());



        PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);



        switch (view.getId()) {
            case R.id.setBtn:


                String text = dateTimeIn.getText().toString().trim();

                if (text.isEmpty()) {
                    Toast.makeText(this, "Please select date and time", Toast.LENGTH_SHORT).show();
                } else {
                    dateTimeIn.getText().toString().trim();
                    Toast.makeText(this, "Done!", Toast.LENGTH_SHORT).show();
                }


                break;

            case R.id.cancelBtn:
                alarmManager.cancel(alarmIntent);
                Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
                break;




        }


    }
} 
这是我的接收代码

    private static final String CHANNEL_ID = "SAMPLE_CHANNEL";

    @Override
    public void onReceive(Context context, Intent intent) {
        int notificationId = intent.getIntExtra("notificationId", 0);
        String message = intent.getStringExtra("message");

        Intent mainIntent = new Intent(context, TipsWc.class);
        PendingIntent contentIntent = PendingIntent.getActivity(
                context, 0, mainIntent, 0
        );

        NotificationManager notificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence channel_name = "My Notification";
            int importance = NotificationManager.IMPORTANCE_HIGH;

            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, channel_name, importance);
            notificationManager.createNotificationChannel(channel);
        }


        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID);
        Uri soundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        Bitmap picture = BitmapFactory.decodeResource(context.getResources(),R.drawable.notif2);

        long vibrate[]={100,500,100,500};
        builder.setSmallIcon(R.drawable.nssmall);
        builder.setContentTitle("Your aquarium maintenance schedule");
        builder.setLargeIcon(picture);
        builder.setStyle(new NotificationCompat.BigPictureStyle()
            .bigPicture(picture)
            .bigLargeIcon(null));
        builder.setContentText(message);
        builder.setContentIntent(contentIntent);
        builder.setPriority(NotificationCompat.PRIORITY_HIGH);
        builder.setAutoCancel(true);
        builder.setLights(Color.YELLOW, 200, 200);
        builder.setSound(soundUri);
        builder.setVibrate(vibrate);



        notificationManager.notify(notificationId, builder.build());

    }
}


退房您需要在
onTimeSet
中使用
alarmManager.setExact
callback@aytek感谢您的回复,我将代码
开关(view.getId()){case R.id.setBtn:Calendar cal=Calendar.getInstance();alarmManager.setExact(alarmManager.RTC_WAKEUP,cal.getTimeInMillis(),alarmIntent)
确实会出现通知,但没有安排,请签出。您需要在
onTimeSet中使用
alarmManager.setExact
callback@aytek感谢您的回复,我将代码
开关(view.getId()){case R.id.setBtn:Calendar cal=Calendar.getInstance();alarmManager.setExact(alarmManager.RTC_WAKEUP,cal.getTimeInMillis(),alarmIntent);
确实会显示通知,但不会安排通知,