0

我已成功将事件添加到本机日历,并且适用于 Android API 级别 14 或更高版本。

我尝试了@VishalKhakhkhar 的代码,但我仍然无法解决这个问题?我收到错误:在运行 2.3.6 的设备上进行测试时,找不到处理 Intent { act=android.intent.action.EDIT typ=vnd.android.cursor.item/event的活动

请参阅下面的更新代码,尝试解决此问题:-

    Button btnEvents = (Button) findViewById(R.id.button1);
    btnEvents.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            long startMillis = 0; 
            long endMillis = 0; 
            Calendar beginTime = Calendar.getInstance(); 
            beginTime.set(2014, 1, 16, 16, 0);  
            startMillis = beginTime.getTimeInMillis(); 
            Calendar endTime = Calendar.getInstance(); 
            endTime.set(2014, 1, 16, 22, 30);
            endMillis= endTime.getTimeInMillis();

            if (Build.VERSION.SDK_INT >= 14) {
                Intent intent = new Intent(Intent.ACTION_EDIT).setData(Events.CONTENT_URI)
                    .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startMillis)
                    .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endMillis)
                    .putExtra(Events.TITLE, "Title")
                    .putExtra(Events.DESCRIPTION, "Description")
                    .putExtra(Events.EVENT_LOCATION, "Location")
                    .putExtra(Reminders.HAS_ALARM, true)
                    .putExtra(Reminders.METHOD, Reminders.METHOD_DEFAULT);
                    startActivity(intent);
            } else {
                Intent intent = new Intent(Intent.ACTION_EDIT);
                intent.setType("vnd.android.cursor.item/event");
                intent.putExtra("title", "Title");
                intent.putExtra("description", "Description");
                intent.putExtra("beginTime", startMillis);
                intent.putExtra("allDay", false);
                intent.putExtra("endTime", endTime.endMillis);
                intent.putExtra("eventLocation", "Location");
                intent.putExtra("hasAlarm", 1);
                startActivity(intent);
            }               
        }
    });     
}
4

3 回答 3

0

你得到的事实

未找到处理 Intent { act=android.intent.action.EDIT typ=vnd.android.cursor.item/event 的 Activity

使用该特定设备意味着没有在其上注册的应用程序可以处理该意图。时期。

您能做的最好的事情就是捕获异常并向用户显示一条消息,告诉用户无法在他/她的设备上处理该操作。

您可以做的其他事情是建议安装一个可以处理它的应用程序,即日历类型的应用程序。

于 2014-04-17T14:43:36.917 回答
0

试试这个

if (Build.VERSION.SDK_INT >= 14) {
    Intent intent = new Intent(Intent.ACTION_EDIT).setData(Events.CONTENT_URI)
        .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
        .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()).putExtra(Events.TITLE, eventname)
        .putExtra(Events.DESCRIPTION, strDesctription)
        .putExtra(Events.EVENT_LOCATION, eventLoc).putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY)
        .putExtra(Reminders.HAS_ALARM, true).putExtra(Reminders.METHOD, Reminders.METHOD_DEFAULT).putExtra(Reminders.DURATION, 45)
        .putExtra(Reminders.MINUTES, 60);
        mContext.startActivity(intent);
} else {
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra("title", eventname);
    intent.putExtra("description", strDesctription);
    intent.putExtra("beginTime", beginTime.getTimeInMillis());
    intent.putExtra("allDay", false);
    intent.putExtra("endTime", endTime.getTimeInMillis());
    intent.putExtra("eventLocation", eventLoc);
    intent.putExtra("hasAlarm", 1);
    mContext.startActivity(intent);
}
于 2014-01-10T10:05:27.773 回答
0

如果您希望将事件直接添加到日历中,即不打开意图,您可以使用以下代码..,

    try
    {
    Calendar calendarStart = getCalendarFromISO(startDate);
    Calendar calendarEnd = getCalendarFromISO(endDate);

    Calendar cal = Calendar.getInstance();
     cal.setTimeZone(TimeZone.getTimeZone("GMT-1"));

      ContentResolver cr = this.getContentResolver();
      ContentValues values = new ContentValues();

      values.put(Events.DTSTART, calendarStart.getTimeInMillis());
      values.put(Events.DTEND, calendarEnd.getTimeInMillis());
      values.put(Events.TITLE, title);
 //       values.put(Events.DESCRIPTION, description);
      values.put(Events.CALENDAR_ID, 1);
//        values.put("rrule", "FREQ=DAILY");
//        values.put(Events.EVENT_LOCATION, location);
      values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

// Provider for Calendar
if (android.os.Build.VERSION.SDK_INT <= 7) {

         eventsUri = Uri.parse("content://calendar/events");
     } else 
     {

         eventsUri = Uri.parse("content://com.android.calendar/events");
     }
      Uri uri = cr.insert(eventsUri, values);

//Returns the id for last added event
      eventID = Long.parseLong(uri.getLastPathSegment());
    Log.v("Calendar", "Calender Event Added" + eventID );

     } 
catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

       }

// 格式化日期的方法

 public static Calendar getCalendarFromISO(String dateString) {
    //dateString = dateString.trim().replaceAll(":00$", "00"); // Changing format for SimpleDateFormat

    Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
    SimpleDateFormat dateformat = new SimpleDateFormat(ISO8601DATEFORMAT, Locale.getDefault());

    try {
        Date date = dateformat.parse(dateString);
        calendar.setTime(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    return calendar;
  }
于 2013-12-12T07:48:43.830 回答