Android 如何获取特定日期和时间的通知?

Android 如何获取特定日期和时间的通知?,android,notifications,android-contentprovider,Android,Notifications,Android Contentprovider,您好,我正在搜索如何在选择日期和时间时获取通知,当事件发生在该日期时,该日期和时间将保存在提供程序中,通知将在该日期发出 package com.example.addeventsofcal; import java.sql.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; import an

您好,我正在搜索如何在选择日期和时间时获取通知,当事件发生在该日期时,该日期和时间将保存在提供程序中,通知将在该日期发出

package com.example.addeventsofcal;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;


import com.examples.android.calendar.CalendarView;
import com.examples.android.calendar.R;


public class Addevent extends Activity implements OnClickListener {

    private EditText edtDate;
    private EditText edtTime;

    final Calendar c = Calendar.getInstance();


    final static int RQS_1 = 1;

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

        initializeView();
    }

    private void initializeView() {
        edtDate = (EditText) findViewById(R.id.txtDate);
        edtTime = (EditText) findViewById(R.id.txtTime);
        Intent currentIntent = getIntent();
        Bundle extras = currentIntent.getExtras();

        setCurrentDateOnView();
    }

    DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            final Calendar c = Calendar.getInstance();
            c.set(Calendar.YEAR, year);
            c.set(Calendar.MONTH, monthOfYear);
            c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            // setCurrentDateOnView();
        }
    };

    protected DatePickerDialog Date;

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

            final Calendar c = Calendar.getInstance();
            c.set(Calendar.HOUR_OF_DAY, hourOfDay);
            c.set(Calendar.MINUTE, minute);
            Date = new DatePickerDialog(Addevent.this, date, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
            setAlarm(Date, true);
        }

        private void setAlarm(Date targetCal, boolean isEditMode) {
            Intent myIntent = new Intent(Addevent.this, MyReceiver.class);
            myIntent.putExtra("MODE", isEditMode);
            myIntent.putExtra("time", targetCal.getTime());

            pendingIntent = PendingIntent.getBroadcast(Addevent.this, 0, myIntent, 0);

            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC, targetCal.getTime(), pendingIntent);
        }
    };

    private PendingIntent pendingIntent;

    public void dateOnClick(View view) {
        new DatePickerDialog(Addevent.this, date,
                c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();

    }

    public void timeOnClick(View view) {
        new TimePickerDialog(Addevent.this, time,
                c.get(Calendar.HOUR), c.get(Calendar.MINUTE), false).show();
    }

    public void setCurrentDateOnView() {
        String dateFormat = "yyyy-MM-dd";
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.US);
        edtDate.setText(sdf.format(c.getTime()));

        String timeFormat = "hh:mm a";
        SimpleDateFormat stf = new SimpleDateFormat(timeFormat, Locale.US);
        edtTime.setText(stf.format(c.getTime()));
    }

    public void onClickAddName(View view) {
        // Add a new student record
        ContentValues values = new ContentValues();

        values.put(StudentsProviders.NAME,
                ((EditText) findViewById(R.id.txtName)).getText().toString());

        values.put(StudentsProviders.Description,
                ((EditText) findViewById(R.id.txtGrade)).getText().toString());


        values.put(StudentsProviders.DATE,
                ((EditText) findViewById(R.id.txtDate)).getText().toString());


        values.put(StudentsProviders.Time,
                ((EditText) findViewById(R.id.txtTime)).getText().toString());  

        Uri uri = getContentResolver().insert(StudentsProviders.CONTENT_URI, values);
        Toast.makeText(getBaseContext(), uri.toString(), Toast.LENGTH_LONG).show();  
        Intent returnIntent = new Intent(Addevent.this, CalendarView.class);
        startActivity(returnIntent);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub      
    }
}
请建议我当我们使用计时器侦听器时如何获取通知。当我添加set alaram时,当我在set alaram中转换日期时,我得到了无法转换的错误日期。请建议如何解决这个问题

请使用以下书面方法

注:时间警报为广播接收器

公共类时间警报扩展广播接收器{

Calendar cal=Calendar.getInstance();


@Override
public void onReceive(Context context, Intent intent) {
    NotificationManager nm=null;

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


              PendingIntent contentIntent = PendingIntent.getActivity(context,(int) intent.getExtras().getInt("ID"),
                      intent, 0);


              Notification notif = new Notification(R.drawable.app_icon,
                    "Your Title",System.currentTimeMillis());

              notif.defaults |= Notification.DEFAULT_SOUND;
                notif.flags |= Notification.FLAG_AUTO_CANCEL;
              notif.setLatestEventInfo(context, "ToroRide Reservation",intent.getExtras().getString("NOTIFICATION"), contentIntent);
        notif.when=intent.getExtras().getLong("LONG");

              nm.notify(intent.getExtras().getInt("ID"), notif);


        //  context.startActivity(new Intent(context, ReservationListing.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    }        
}

同时在清单中添加以下内容:


在我的提供商中,我没有使用任何通知id。
Calendar cal=Calendar.getInstance();


@Override
public void onReceive(Context context, Intent intent) {
    NotificationManager nm=null;

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


              PendingIntent contentIntent = PendingIntent.getActivity(context,(int) intent.getExtras().getInt("ID"),
                      intent, 0);


              Notification notif = new Notification(R.drawable.app_icon,
                    "Your Title",System.currentTimeMillis());

              notif.defaults |= Notification.DEFAULT_SOUND;
                notif.flags |= Notification.FLAG_AUTO_CANCEL;
              notif.setLatestEventInfo(context, "ToroRide Reservation",intent.getExtras().getString("NOTIFICATION"), contentIntent);
        notif.when=intent.getExtras().getLong("LONG");

              nm.notify(intent.getExtras().getInt("ID"), notif);


        //  context.startActivity(new Intent(context, ReservationListing.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    }        
<receiver android:name="com.torride.broadcast.TimeAlarm"></receiver>