我正在遵循这个要点,进入insert事件Calendar
我如何update使用下面的代码插入我之前插入的日历事件:
public void addToCalender() throws ParseException {
......
ContentValues event = new ContentValues();
event.put(CalendarContract.Events.CALENDAR_ID, calendarId[0]);
event.put(CalendarContract.Events.TITLE, "Event Title");
event.put(CalendarContract.Events.DESCRIPTION, "Event Description");
event.put(CalendarContract.Events.EVENT_LOCATION, "Eevnt Location");
event.put(CalendarContract.Events.DTSTART, startCalTime);
event.put(CalendarContract.Events.DTEND, endCalTime);
event.put(CalendarContract.Events.STATUS, 1);
event.put(CalendarContract.Events.HAS_ALARM, 1);
event.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());
Uri insertEventUri = AddEventActivity.this.getContentResolver().insert(
eventsUri, event);
ContentValues reminders = new ContentValues();
reminders.put(Reminders.EVENT_ID,
Long.parseLong(insertEventUri.getLastPathSegment()));
reminders.put(Reminders.METHOD, Reminders.METHOD_ALERT);
reminders.put(Reminders.MINUTES, 10);
AddEventActivity.this.getContentResolver().insert(remainderUri, reminders);
}
Run Code Online (Sandbox Code Playgroud)
我想知道,我该怎么做:
1. Remove existing event
2. Update existing event
Run Code Online (Sandbox Code Playgroud) 当他们想要添加新活动时,我们正在尝试向用户显示冰淇淋三明治日历视图.我们只能在模拟器中测试它.
另一个问题是我们找不到任何使用CalendarProvider的示例.在处理三明治日历时,这是正确的课程吗?
使用Google Gdata API会更容易吗?
[编辑]所以我们工作的是向日历添加一个事件,但不是通过API,我们在正确的视图中打开日历.但现在问题是它在模拟器中不起作用,因为我们无法同步日历.
所以问题是:如何使用新的Android 4.0 Ice Cream Sandwich API阅读和编辑Android日历事件?
我们如何将一些额外的数据附加到日历事件,如文件,照片,简单的字符串等,..
我使用扩展属性,并能够通过扩展属性插入一些额外的数据
Uri extendedProperties=Uri.parse("content://com.android.calendar/extendedproperties");
ContentValues extendedValues=new ContentValues();
extendedValues.put("event_id", id);
extendedValues.put("name",key);
extendedValues.put("value",value);
getApplicationContext().getContentResolver().insert(extendedProperties, extendedValues);
Run Code Online (Sandbox Code Playgroud)
然后能够像下面那样检索这些数据
Uri extentdedProperties=Uri.parse("content://com.android.calendar/extendedproperties");
CursorextendedPropertires Cursor=getContentResolver().query(extentdedProperties,null,"event_id = "+Id +",null,null);
Run Code Online (Sandbox Code Playgroud)
它适用于Android 2.2 ...相同的代码,如果在Android 4.0(冰淇淋三明治)测试.它抛出的错误是只有同步适配器才能访问内容://com.android.calendar/extendedproperties.
所以我把查询称为"callerissyncadapter".现在我能够插入扩展属性.但是,一旦事件同步到服务器,服务器就会删除扩展属性.
日历提供商(谷歌除外)也不完全支持这些扩展属性
有没有办法将一些额外的数据附加到除extendedproperties之外的日历事件,或者我们能否以更好的方式使用这些扩展属性.
我正在阅读所有的Android日历事件,它使用下面的代码工作正常,但我想从用户邮件帐户中获取所有谷歌日历事件.我怎么能这样做?任何建议或示例程序都会非常有用!
例如:我想获取xxxxxxxxx@gmail.com的事件(我在android手机中打开的邮件帐号)
public static void readCalendarEvent(Context context) throws ParseException {
ContentResolver contentResolver = context.getContentResolver();
Calendar calendar = Calendar.getInstance();
String dtstart = "dtstart";
String dtend = "dtend";
SimpleDateFormat displayFormatter = new SimpleDateFormat("MMMM dd, yyyy (EEEE)");
stime=displayFormatter.format(calendar.getTime());
SimpleDateFormat startFormatter = new SimpleDateFormat("MM/dd/yy");
String dateString = startFormatter.format(calendar.getTime());
long after = calendar.getTimeInMillis();
SimpleDateFormat formatterr = new SimpleDateFormat("hh:mm:ss MM/dd/yy");
Calendar endOfDay = Calendar.getInstance();
Date dateCCC = formatterr.parse("47:59:59 " + dateString);
endOfDay.setTime(dateCCC);
cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"), (new String[] { "calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation" }), "(" …Run Code Online (Sandbox Code Playgroud) 如何自动将事件添加到日历中?如果我使用此源代码,它会打开带有填充条目的日历,但我必须单击"保存"按钮进行保存.
public class CalendarApplicationActivity extends Activity
{
public static final String[] EVENT_PROJECTION = new String[]
{
Calendars._ID, // 0
Calendars.ACCOUNT_NAME, // 1
Calendars.CALENDAR_DISPLAY_NAME // 2
};
private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calendar_application);
}
public void onClick(View view)
{
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra(Events.TITLE, "Learn Android");
intent.putExtra(Events.EVENT_LOCATION, "Home suit home");
intent.putExtra(Events.DESCRIPTION, "Download Examples");
GregorianCalendar calDate = new GregorianCalendar(2012, 10, 02);
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
calDate.getTimeInMillis());
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
calDate.getTimeInMillis());
intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
intent.putExtra(Events.AVAILABILITY, …Run Code Online (Sandbox Code Playgroud) android calendar android-emulator android-intent android-calendar
编辑/注意:我真的需要一个答案,我想继续使用"股票"谷歌Android API.我已经在此创造了+100的赏金,但如果我在接下来的几天内使用股票API得到一个简单的解决方案,我将再增加+100,使其值200点.
我正在尝试使用Android CalendarView控件.我在NestedScrollView中使用按钮和CalendarView制作了一个小应用程序.我做了按钮,它的边距非常大,所以我可以验证滚动工作.在运行Android 6.01的三星Galaxy S5上运行正常.但是在运行4.2.2的三星S Duo(这是我的预定目标)上,没有办法提前一个月(注意当月没有箭头)
这是运行Android 6.01的三星S5的屏幕截图
这是三星的Duo运行4.2.2
content_main.xml看起来像这样...
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- This linear layout is because the scrollview can have only 1 direct child -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/recordEnd"
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_marginTop="100dp"
android:layout_marginBottom="100dp"
android:gravity="center"
android:text="Record End"/>
<CalendarView
android:id="@+id/thecalendar"
android:layout_width="240dp"
android:layout_height="300dp"
android:minDate="01/01/2016"
android:maxDate="11/30/2016"/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
...在Android Studio中,设计视图确实显示了箭头.我不知道如何调试这个.
我希望在日历视图中显示月份,但我无法弄明白.我试过了
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month,
int dayOfMonth) {
int d = dayOfMonth;
int m = month;
Log.d("month", "" + m);
String curDate = String.valueOf(d);
}
});
Run Code Online (Sandbox Code Playgroud)
但它仅在用户点击月份的日期时触发.我想要的是当用户更改月份时我想要更改的月份(即日历视图中显示的月份).任何帮助将不胜感激.提前致谢.
我正在尝试使用Android的新日历API来阅读今天的所有日历活动.我无法在数据库查询中找到正确的选择以返回所有事件.似乎所有经常性和全天活动都被排除在选择之外.什么样的选择允许我从日历api获得今天的所有活动?
这是我目前的尝试:
Cursor cur = null;
String selection = "((" + CalendarContract.Events.DTSTART
+ " >= ?) AND (" + CalendarContract.Events.DTEND + " <= ?))";
Time t = new Time();
t.setToNow();
String dtStart = Long.toString(t.toMillis(false));
t.set(59, 59, 23, t.monthDay, t.month, t.year);
String dtEnd = Long.toString(t.toMillis(false));
String[] selectionArgs = new String[] { dtStart, dtEnd };
cur = c.getContentResolver().query(CalendarContract.Events.CONTENT_URI,
null, selection, selectionArgs, null);
Run Code Online (Sandbox Code Playgroud)
我不确定如何扩大选择范围或增加选择以获得重复活动和全天活动.任何帮助,将不胜感激.
我有一个带有四个View的Android日历
选项:周视图,月视图,日视图和日程视图.
我想在议程视图列表中显示今天,即使没有附加到今天的事件.我试图检查今天是否存在任何事件.但如果我强行添加额外的数据,我会得到nullpointer例外.以下是日历议程视图的视图.
我有一个stickyheader列表视图来显示事件列表.能够显示活动的所有日子.但我的问题是:如何显示今天即使没有"今天没有事件创建现在选项"的事件.
任何帮助将不胜感激.
已使用https://github.com/Etar-Group/Etar-Calendar/tree/master/src/com/android/calendar/agenda显示和加载事件.
android ×10
android-calendar ×10
calendar ×3
android-4.0-ice-cream-sandwich ×2
java ×2
calendarview ×1