Android中自定义日历的通知

Android中自定义日历的通知,android,calendar,notifications,Android,Calendar,Notifications,我有一个自定义的日历应用程序,我与我们的学校信息亭应用程序集成。日历必须允许添加事件,并为每个事件设置通知。如何存储每个事件并在设定的时间和日期通知它? 有人能帮我吗? 这是日历代码 public class MyCalendar extends Activity implements OnClickListener { public Calendar month; public CalendarAdapter adapter; public Handler handler; public A

我有一个自定义的日历应用程序,我与我们的学校信息亭应用程序集成。日历必须允许添加事件,并为每个事件设置通知。如何存储每个事件并在设定的时间和日期通知它? 有人能帮我吗? 这是日历代码

public class MyCalendar extends Activity implements OnClickListener {

public Calendar month;
public CalendarAdapter adapter;
public Handler handler;
public ArrayList<String> items;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.calendar);

        month = Calendar.getInstance();
    items = new ArrayList<String>();
    adapter = new CalendarAdapter(this, month);

    GridView gridView = (GridView) findViewById(R.id.gridview);
    gridView.setAdapter(adapter);

    handler = new Handler();
    handler.post(calendarUpdater);

    TextView title = (TextView) findViewById(R.id.title);
    title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));

    Button previous = (Button) findViewById(R.id.previous);
    previous.setOnClickListener(this);

    Button next = (Button) findViewById(R.id.next);
    next.setOnClickListener(this);

    gridView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {
            TextView date = (TextView) v.findViewById(R.id.date);
            if (date instanceof TextView && !date.getText().equals("")) {

                Intent intent = new Intent(
                        "com.gpplsmje.mac.calendar.CALENDAREVENTS");

                intent.putExtra(
                        "date",
                        android.text.format.DateFormat
                                .format("MMMM", month)
                                + " "
                                + day
                                + ", "
                                + android.text.format.DateFormat.format(
                                        "yyyy", month));
                startActivity(intent);
            }
        }
    });

public void refreshCalendar() {
    TextView title = (TextView) findViewById(R.id.title);
    daysAdapter.fill();
    adapter.refreshDays();
    adapter.notifyDataSetChanged();
    handler.post(calendarUpdater);
    title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
}

@Override
public void onNewIntent(Intent intent) {
    String date = intent.getStringExtra("date");
    String[] dateArr = date.split("-");
    month.set(Integer.parseInt(dateArr[0]),
            Integer.parseInt(dateArr[1], Integer.parseInt(dateArr[2])));
}

public Runnable calendarUpdater = new Runnable() {

    @Override
    public void run() {
        items.clear();
        for (int i = 0; i < 31; i++) {
            Random r = new Random();
            if (r.nextInt(10) > 6) {
                items.add(Integer.toString(i));
            }
        }
        adapter.setItems(items);
        adapter.notifyDataSetChanged();
    }

};

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.previous:
        if (month.get(Calendar.MONTH) == month
                .getActualMinimum(Calendar.MONTH)) {
            month.set((month.get(Calendar.YEAR) - 1),
                    month.getActualMaximum(Calendar.MONTH), 1);
        } else {
            month.set(Calendar.MONTH, month.get(Calendar.MONTH) - 1);
        }
        refreshCalendar();
        break;
    case R.id.next:
        if (month.get(Calendar.MONTH) == month
                .getActualMaximum(Calendar.MONTH)) {
            month.set((month.get(Calendar.YEAR) + 1),
                    month.getActualMinimum(Calendar.MONTH), 1);
        } else {
            month.set(Calendar.MONTH, month.get(Calendar.MONTH) + 1);
        }
        refreshCalendar();
        break;
    }
}
}
公共类MyCalendar扩展活动实现OnClickListener{
公历月;
公共日历适配器;
公共经办人;
公共阵列列表项;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.calendar);
month=Calendar.getInstance();
items=newarraylist();
适配器=新日历适配器(本月);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(适配器);
handler=新的handler();
handler.post(日历更新程序);
TextView title=(TextView)findViewById(R.id.title);
title.setText(android.text.format.DateFormat.format(“MMMM-yyyy”,month));
按钮先前=(按钮)findViewById(R.id.previous);
previous.setOnClickListener(此);
按钮下一步=(按钮)findViewById(R.id.next);
next.setOnClickListener(this);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
TextView日期=(TextView)v.findViewById(R.id.date);
if(text视图的日期实例&&!date.getText()等于(“”){
意图=新意图(
“com.gpplsmje.mac.calendar.CALENDAREVENTS”);
意向书(
“日期”,
android.text.format.DateFormat
.格式(“毫米”,月)
+ " "
+一天
+ ", "
+android.text.format.DateFormat.format(
“yyy”,月);
星触觉(意向);
}
}
});
公共日历(){
TextView title=(TextView)findViewById(R.id.title);
daysAdapter.fill();
adapter.refreshDays();
adapter.notifyDataSetChanged();
handler.post(日历更新程序);
title.setText(android.text.format.DateFormat.format(“MMMM-yyyy”,month));
}
@凌驾
公共帐篷(意向){
字符串日期=intent.getStringExtra(“日期”);
字符串[]dateArr=date.split(“-”);
month.set(Integer.parseInt(dateArr[0]),
Integer.parseInt(dateArr[1],Integer.parseInt(dateArr[2]));
}
public Runnable calendarUpdater=new Runnable(){
@凌驾
公开募捐{
items.clear();
对于(int i=0;i<31;i++){
随机r=新随机();
如果(r.nextInt(10)>6){
添加(整数.toString(i));
}
}
adapter.setItems(项目);
adapter.notifyDataSetChanged();
}
};
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.先前:
if(month.get(Calendar.month)=month
.getActualMinimum(日历月)){
month.set((month.get(Calendar.YEAR)-1),
月.getActualMaximum(日历月),1);
}否则{
month.set(Calendar.month,month.get(Calendar.month)-1);
}
刷新日历();
打破
案例R.id.next:
if(month.get(Calendar.month)=month
.getActualMaximum(日历月)){
month.set((month.get(Calendar.YEAR)+1),
月.getActualMinimum(日历月),1);
}否则{
month.set(Calendar.month,month.get(Calendar.month)+1);
}
刷新日历();
打破
}
}
}
下面是CalendarAdapter类:

public class CalendarAdapter extends BaseAdapter {

static final int FIRST_DAY_OF_WEEK = 0;

private Context context;

private java.util.Calendar month;
private Calendar selectedDate;
private ArrayList<String> items;

public String[] days;

public CalendarAdapter(Context c, Calendar monthCalendar) {
    month = monthCalendar;
    selectedDate = (Calendar) monthCalendar.clone();
    context = c;
    month.set(Calendar.DAY_OF_MONTH, 1);
    this.items = new ArrayList<String>();
    refreshDays();
}

public void setItems(ArrayList<String> items) {
    for (int i = 0; i != items.size(); i++) {
        if (items.get(i).length() == 1) {
            items.set(i, "0" + items.get(i));
        }
    }
    this.items = items;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return days.length;
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    TextView dayView;
    if (convertView == null) { // if it's not recycled, initialize some
                                // attributes
        LayoutInflater vi = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.calendar_item, null);
    }
    dayView = (TextView) v.findViewById(R.id.date);

    // disable empty days from the beginning

    if (days[position].equals("")) {
        dayView.setClickable(false);
        dayView.setFocusable(false);
    } else {
        // mark current day as focused
        if (month.get(Calendar.YEAR) == selectedDate.get(Calendar.YEAR)
                && month.get(Calendar.MONTH) == selectedDate
                        .get(Calendar.MONTH)
                && days[position].equals(""
                        + selectedDate.get(Calendar.DAY_OF_MONTH))) {
            v.setBackgroundResource(R.drawable.item_background_focused);
        } else {
            v.setBackgroundResource(R.drawable.calendar_item_bg);
        }
    }
    dayView.setText(days[position]);

    // create date string for comparison
    String date = days[position];

    if (date.length() == 1) {
        date = "0" + date;
    }
    String monthStr = "" + (month.get(Calendar.MONTH) + 1);
    if (monthStr.length() == 1) {
        monthStr = "0" + monthStr;
    }

    // show icon if date is not empty and it exists in the items array
    ImageView iw = (ImageView) v.findViewById(R.id.date_icon);
    if (date.length() > 0 && items != null && items.contains(date)) {
        iw.setVisibility(View.VISIBLE);
    } else {
        iw.setVisibility(View.INVISIBLE);
    }
    return v;
}

public void refreshDays() {
    // clear items
    items.clear();

    int lastDay = month.getActualMaximum(Calendar.DAY_OF_MONTH);
    int firstDay = month.get(Calendar.DAY_OF_WEEK);

    int remain = 0;
    int minus = firstDay - 1;
    if (lastDay == 31) {
        remain = 11 - minus;
        if (firstDay == 1) {
            days = new String[lastDay + (FIRST_DAY_OF_WEEK * 6) + remain];
        } else {
            days = new String[lastDay + firstDay - (FIRST_DAY_OF_WEEK + 1) + remain];
        }
    } else if (lastDay == 30) {
        remain = 12 - minus;
        if (firstDay == 1) {
            days = new String[lastDay + (FIRST_DAY_OF_WEEK * 6) + remain];
        } else {
            days = new String[lastDay + firstDay - (FIRST_DAY_OF_WEEK + 1) + remain];
        }
    } else if (lastDay == 29) {
        remain = 13 - minus;
        if (firstDay == 1) {
            days = new String[lastDay + (FIRST_DAY_OF_WEEK * 6) + remain];
        } else {
            days = new String[lastDay + firstDay - (FIRST_DAY_OF_WEEK + 1) + remain];
        }
    } else if (lastDay == 28) {
        remain = 14 - minus;
        if (firstDay == 1) {
            days = new String[lastDay + (FIRST_DAY_OF_WEEK * 6) + remain];
        } else {
            days = new String[lastDay + firstDay - (FIRST_DAY_OF_WEEK + 1) + remain];
        }
    }
    // figure size of the array
    int dummy;
    if (firstDay == 1) {
        dummy = lastDay + (FIRST_DAY_OF_WEEK * 6);
    } else {
        dummy = lastDay + firstDay - (FIRST_DAY_OF_WEEK + 1);
    }

    int j = FIRST_DAY_OF_WEEK;

    // populate empty days before first real day
    if (firstDay > 1) {
        for (j = 0; j < firstDay - FIRST_DAY_OF_WEEK; j++) {
            days[j] = "";
        }
    } else {
        for (j = 0; j < FIRST_DAY_OF_WEEK * 6; j++) {
            days[j] = "";
        }
        j = FIRST_DAY_OF_WEEK * 6 + 1; // sunday => 1, monday => 7
    }

    // populate days
    int dayNumber = 1;
    int i;
    for (i = (j - 1); i < dummy; i++) {
        days[i] = "" + dayNumber;
        dayNumber++;
    }
    for(int k = i; k < days.length; k++){
        days[k] = "";
    }
}

}
公共类CalendarAdapter扩展了BaseAdapter{
每周第一天的静态最终整数=0;
私人语境;
private java.util.Calendar month;
私人日历选择日期;
私有ArrayList项;
公共字符串[]天;
公共日历适配器(上下文c、日历月日历){
月份=月份;
selectedDate=(日历)monthCalendar.clone();
上下文=c;
月.集(日历.日/月,1);
this.items=new ArrayList();
刷新天数();
}
公共无效集合项(ArrayList项){
对于(int i=0;i!=items.size();i++){
if(items.get(i).length()==1){
items.set(i,“0”+items.get(i));
}
}
这个项目=项目;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回天数。长度;
}
@凌驾
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
TextView dayView;
如果(convertView==null){//如果它不是循环使用的,则初始化一些
//属性
LayoutInflater vi=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
v=vi.充气(R.布局.日历项,空);
}
dayView=(TextView)v.findViewById(R.id.date);
//从开始禁用空日
如果(天[位置])。等于(“”){
dayView.setClickable(假);
dayView.setFocusable(假);
}否则{
//将当前一天标记为焦点
if(month.get(Calendar.YEAR)=selectedDate.get(Calendar.YEAR)
&&month.get(Calendar.month)=selectedDate
.get(日历.月份)
&&天数[位置]。等于(“”)
+选择日期。获取(Calenda)