Event Not Saved In Calendar
I want to save an event in the calendar directly, without openning the calendar app. I have found that in some devices the event is not saved in calendar, but I am not getting any
Solution 1:
Find the solution :
Follow the steps it will create event directly :
Manifest.xml
Add permissions in Manifest
<uses-permissionandroid:name="android.permission.WRITE_CALENDAR" /><uses-permissionandroid:name="android.permission.READ_CALENDAR" />activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="testpreference.com.testcalendar.MainActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="Calendars" /><Spinnerandroid:id="@+id/calendarid_spinner"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/newevent_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="New Event"android:layout_gravity="center_horizontal"
/></LinearLayout>MainActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
publicclassMainActivityextendsAppCompatActivity {
privatestaticfinalStringTAG="MainActivity";
private Spinner calendarIdSpinner;
private Hashtable<String,String> calendarIdTable;
private Button newEventButton;
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
calendarIdSpinner = (Spinner) findViewById(R.id.calendarid_spinner);
newEventButton = (Button) findViewById(R.id.newevent_button);
newEventButton.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
if (CalendarHelper.haveCalendarReadWritePermissions(MainActivity.this))
{
addNewEvent();
}
else
{
CalendarHelper.requestCalendarReadWritePermission(MainActivity.this);
}
}
});
calendarIdSpinner.setOnItemSelectedListener(newCustomOnItemSelectedListener());
if (CalendarHelper.haveCalendarReadWritePermissions(this))
{
//Load calendars
calendarIdTable = CalendarHelper.listCalendarId(this);
updateCalendarIdSpinner();
}
}
privatevoidupdateCalendarIdSpinner()
{
if (calendarIdTable==null)
{
return;
}
List<String> list = newArrayList<String>();
Enumeratione= calendarIdTable.keys();
while (e.hasMoreElements()) {
Stringkey= (String) e.nextElement();
list.add(key);
}
ArrayAdapter<String> dataAdapter = newArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
calendarIdSpinner.setAdapter(dataAdapter);
}
@OverridepublicvoidonRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode==CalendarHelper.CALENDARHELPER_PERMISSION_REQUEST_CODE)
{
if (CalendarHelper.haveCalendarReadWritePermissions(this))
{
Toast.makeText(this, (String)"Have Calendar Read/Write Permission.",
Toast.LENGTH_LONG).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
privatevoidaddNewEvent()
{
if (calendarIdTable==null)
{
Toast.makeText(this, (String)"No calendars found. Please ensure at least one google account has been added.",
Toast.LENGTH_LONG).show();
//Load calendars
calendarIdTable = CalendarHelper.listCalendarId(this);
updateCalendarIdSpinner();
return;
}
finallongoneHour=1000 * 60 * 60;
finallongtenMinutes=1000 * 60 * 10;
longoneHourFromNow= (newDate()).getTime() + oneHour;
longtenMinutesFromNow= (newDate()).getTime() + tenMinutes;
StringcalendarString= calendarIdSpinner.getSelectedItem().toString();
intcalendar_id= Integer.parseInt(calendarIdTable.get(calendarString));
CalendarHelper.MakeNewCalendarEntry(this, "Test", "Add event", "Somewhere",tenMinutesFromNow,tenMinutesFromNow+oneHour,false,true,calendar_id,3);
}
}
Create class for calendar selection
import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Toast; publicclassCustomOnItemSelectedListenerimplementsOnItemSelectedListener { privatestaticfinalStringTAG="OnItemSelectedListener"; publicvoidonItemSelected(AdapterView<?> parent, View view, int pos,long id) { Toast.makeText(parent.getContext(), "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_SHORT).show(); } @OverridepublicvoidonNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub Log.v(TAG,"onNohingSelected() called."); } }CalendarHelper.java
import android.Manifest; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.provider.CalendarContract.Events; import android.provider.CalendarContract.Reminders; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.util.Log; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; import java.util.TimeZone; publicclassCalendarHelper { //Remember to initialize this activityObj first, by calling initActivityObj(this) from//your activityprivatestaticfinalStringTAG="CalendarHelper"; publicstaticfinalintCALENDARHELPER_PERMISSION_REQUEST_CODE=99; publicstaticvoidMakeNewCalendarEntry(Activity caller,String title,String description,String location,long startTime,long endTime, boolean allDay,boolean hasAlarm, int calendarId,int selectedReminderValue) { ContentResolvercr= caller.getContentResolver(); ContentValuesvalues=newContentValues(); values.put(Events.DTSTART, startTime); values.put(Events.DTEND, endTime); values.put(Events.TITLE, title); values.put(Events.DESCRIPTION, description); values.put(Events.CALENDAR_ID, calendarId); values.put(Events.STATUS, Events.STATUS_CONFIRMED); if (allDay) { values.put(Events.ALL_DAY, true); } if (hasAlarm) { values.put(Events.HAS_ALARM, true); } //Get current timezone values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); Log.i(TAG, "Timezone retrieved=>"+TimeZone.getDefault().getID()); Uriuri= cr.insert(Events.CONTENT_URI, values); Log.i(TAG, "Uri returned=>"+uri.toString()); // get the event ID that is the last element in the UrilongeventID= Long.parseLong(uri.getLastPathSegment()); if (hasAlarm) { ContentValuesreminders=newContentValues(); reminders.put(Reminders.EVENT_ID, eventID); reminders.put(Reminders.METHOD, Reminders.METHOD_ALERT); reminders.put(Reminders.MINUTES, selectedReminderValue); Uriuri2= cr.insert(Reminders.CONTENT_URI, reminders); } } publicstaticvoidrequestCalendarReadWritePermission(Activity caller) { List<String> permissionList = newArrayList<String>(); if (ContextCompat.checkSelfPermission(caller,Manifest.permission.WRITE_CALENDAR)!=PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_CALENDAR); } if (ContextCompat.checkSelfPermission(caller,Manifest.permission.READ_CALENDAR)!=PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.READ_CALENDAR); } if (permissionList.size()>0) { String [] permissionArray = newString[permissionList.size()]; for (int i=0;i<permissionList.size();i++) { permissionArray[i] = permissionList.get(i); } ActivityCompat.requestPermissions(caller, permissionArray, CALENDARHELPER_PERMISSION_REQUEST_CODE); } } publicstatic Hashtable listCalendarId(Context c) { if (haveCalendarReadWritePermissions((Activity)c)) { String projection[] = {"_id", "calendar_displayName"}; Uri calendars; calendars = Uri.parse("content://com.android.calendar/calendars"); ContentResolvercontentResolver= c.getContentResolver(); CursormanagedCursor= contentResolver.query(calendars, projection, null, null, null); if (managedCursor.moveToFirst()) { String calName; String calID; intcont=0; intnameCol= managedCursor.getColumnIndex(projection[1]); intidCol= managedCursor.getColumnIndex(projection[0]); Hashtable<String,String> calendarIdTable = newHashtable<>(); do { calName = managedCursor.getString(nameCol); calID = managedCursor.getString(idCol); Log.v(TAG, "CalendarName:" + calName + " ,id:" + calID); calendarIdTable.put(calName,calID); cont++; } while (managedCursor.moveToNext()); managedCursor.close(); return calendarIdTable; } } returnnull; } publicstaticbooleanhaveCalendarReadWritePermissions(Activity caller) { intpermissionCheck= ContextCompat.checkSelfPermission(caller, Manifest.permission.READ_CALENDAR); if (permissionCheck== PackageManager.PERMISSION_GRANTED) { permissionCheck = ContextCompat.checkSelfPermission(caller, Manifest.permission.WRITE_CALENDAR); if (permissionCheck== PackageManager.PERMISSION_GRANTED) { returntrue; } } returnfalse; } }
Post a Comment for "Event Not Saved In Calendar"