Error Inserting Event into Calendar with Intent

2019-02-26 18:32发布

问题:

I'm trying to insert events to the calendar from a fragment, but I keep getting an error that no activity is found to handle Intent.

Here's the error -

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.INSERT cat=[android.intent.category.APP_CALENDAR] typ=vnd.android.cursor.item/event (has extras) }

Here's my code:

Intent intent = new Intent(Intent.ACTION_INSERT);
intent.addCategory(Intent.CATEGORY_APP_CALENDAR);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra(Events.TITLE, "Phototherapy Treatment");
intent.putExtra(Events.EVENT_LOCATION, "");
intent.putExtra(Events.DESCRIPTION, "Phototherapy Treatment");

// Setting dates
Calendar calDate = Calendar.getInstance();
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,calDate.getTimeInMillis());
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
calDate.getTimeInMillis()+60*60*1000);

// Make it a full day event
intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, false);

// Make it a recurring Event                    
intent.putExtra(Events.RRULE, "FREQ=WEEKLY;COUNT="+Integer.valueOf(No.getText().toString())+";"
+"WKST=SU;BYDAY="+days);

// Making it private and shown as busy
 intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
 intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);

startActivity(intent);

Intent Filter

<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<action android:name="android.intent.action.INSERT" /> 
<category android:name="android.intent.category.APP_CALENDAR" /> 
<data android:mimeType="vnd.android.cursor.item/event" /> 
</intent-filter>

回答1:

I used Intent intent = new Intent(Intent.ACTION_EDIT); and it seemed to resolve the issue



回答2:

Calender App may not be installed in some devices. So enclose within try catch block to check.

Calendar startTymVar = Calendar.getInstance();
startTymVar.set(2015, 12, 31, 11, 30);

Intent calendarIntentVar = new Intent(Intent.ACTION_INSERT)
            .setData(CalendarContract.Events.CONTENT_URI)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTymVar.getTimeInMillis())
            .putExtra(CalendarContract.Events.TITLE, "New Year")
            .putExtra(CalendarContract.Events.DESCRIPTION, "Hav ful fun");

try
{
    startActivity(calendarIntentVar);
}
catch (ActivityNotFoundException ErrVar)
{
    Toast.makeText(this, "Install Calender App", Toast.LENGTH_LONG).show();
}


回答3:

if you already know the information which it looks like you do you do not need to launch the calendar app, simply just insert the event into the database see adding events

Also looking at the docs APP_CALENDAR is only used with ACTION_MAIN not ACTION_INSERT



回答4:

Check if there is any activity that resolves this intent

if (intent.resolveActivity(getPackageManager()) == null) {
}