我正在尝试使用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)
我不确定如何扩大选择范围或增加选择以获得重复活动和全天活动.任何帮助,将不胜感激.
我需要支持Android 2.1及更高版本.我知道CalendarContract在Android 2.1中不可用,所以我做了以下解决方法.
Intent intent = new Intent(Intent.ACTION_EDIT)
.setType("vnd.android.cursor.item/event")
.putExtra("beginTime", beginTime.getTimeInMillis())
.putExtra("title", title)
.putExtra("description", description)
.putExtra("eventLocation", location)
.putExtra("allDay", allDay)
.putExtra(Intent.EXTRA_EMAIL, email );
if(!allDay) {
intent.putExtra("endTime", endTime.getTimeInMillis());
}
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
到目前为止,这非常有效.我已经在2.1到4.1上进行了测试.
我也想添加提醒,但是我找不到任何关于如何使用Intents的文档.有人有例子吗?我想避免为我的清单添加更多权限以便写入日历,所以如果你有一个需要的建议,我将无法使用它.
我尝试通过以下代码添加日历.创建的活动可以通过手机上的日历应用读取,但只需同步到在线Google日历即可.任何人都可以给我一些点击来解决这个问题吗?
这里有一些评论1.代码在我的真实手机上运行(Galaxy Nexus 4.1.1)2.所有其他日历事件都可以同步到Google日历,只是程序添加无法同步.
---更新---
当我更改以下代码时
values.put(CalendarContract.Events.SYNC_EVENTS,1);
values.put(CalendarContract.Events.VISIBLE, 1);
Run Code Online (Sandbox Code Playgroud)
- 我收到了错误
java.lang.IllegalArgumentException: Only the provider may write to sync_events
Run Code Online (Sandbox Code Playgroud)
public void addEvent() {
long startMillis = 0;
long endMillis = 0;
Log.v("LOG", "entered addEvent");
//Calendar beginTime = Calendar.getInstance();
//beginTime.set(2012, 8, 11, 22, 0);
//startMillis = beginTime.getTimeInMillis();
startMillis = System.currentTimeMillis() + (3600 * 1000)*4;
//Calendar endTime = Calendar.getInstance();
//endTime.set(2012, 8, 11, 23, 0);
//endMillis = endTime.getTimeInMillis();
endMillis = System.currentTimeMillis() + (3600 * 1000)*5;
ContentResolver cr = getContentResolver();
ContentValues values = new …Run Code Online (Sandbox Code Playgroud) 我正在处理的应用程序需要能够在所选日历中创建事件,然后当用户在其日历查看应用程序中查看这些事件时,它提供了一个选项,可以返回到我的应用程序以查看有关它和数据的更多信息.与之相关.
使用日历提供程序我能够创建事件并将Uri存储到事件中供以后使用/删除但我还没有找到一种在日历查看应用程序中从这些事件中打开我的应用程序的好方法.
我考虑过的两个选项是在事件描述中包含一个自定义URL,点击后会被我的app中的intent过滤器捕获(例如myapp:// event/1000),或者我可以设置CUSTOM_APP_PACKAGE和CUSTOM_APP_URI值创建事件时CalendarContract.
我的第一个选项的问题是我不认为我可以保证日历查看应用程序会将我的自定义URL正确地视为链接并让用户点击它(在我的平板电脑上的Google日历中不起作用).第二个选项看起来更有希望,但我找不到很多解释如何使用它的文档.
有谁知道如何正确地做到这一点?任何帮助表示赞赏!
我正在编写一个需要在android中的日历中添加一些事件的应用程序.对于插入我只使用了以下代码:
public void onItemClick(AdapterView<?> adapter, View curview, int position, long id) {
WhoisEntry entry = this.adapter.getItem(position);
String domainName = entry.getDomainName();
Date expDate = entry.expirationDate;
Toast.makeText(getApplicationContext(), "Domain: " + domainName, Toast.LENGTH_SHORT).show();
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", entry.expirationDate);
intent.putExtra("allDay", false);
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
intent.putExtra("title", "Expiration of " + entry.domainName);
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否有可能获得与该事件相关联的id,在插入事件后以这种方式,并且其id被保存到我的应用程序中,用户可以直接从应用程序内部调用该事件.可能吗?
我正在尝试阅读用户设置的提醒.我的意思是"提醒":目前有两种不同的含义,第一种是与日历中每个事件相关的"警报",您可以从中读取它们CalendarContract.Reminders,第二种是用户通过Google Now插入的不相关事件与"记住我......"或通过谷歌日历应用程序插入提醒操作.我在说第二个.我正在阅读活动表CalendarContract.Events.但是,似乎此信息未保存在那里或无法访问.是否有不同的内容提供商提醒?
在我的应用中,用户可以将特殊事件添加到他们的Google日历中.我希望在没有任何警报/提醒/通知的情况下添加事件.某些用户的日历具有提醒的默认设置,如"活动前一天,即9:00".
我如何添加事件,以便尽管有默认设置,它们根本不会有任何警报?
ContentValues eventValues = new ContentValues();
eventValues.put("calendar_id", calendarId);
eventValues.put("title",title);
eventValues.put("allDay", 1);
eventValues.put("dtstart", dtstart);
eventValues.put("dtend", dtend );
eventValues.put("hasAlarm", 1); // I tried both 0 and 1, none of them solved the problem!
eventValues.put("hasAttendeeData", 1);
eventValues.put("availability",1);
Run Code Online (Sandbox Code Playgroud)
编辑:似乎只有在事件与Google的服务同步后才会添加提醒,几分钟后,而不是立即.我该怎样预防呢?
在日历提供程序中,有多个数据表,其中一个是“事件”表,用于存储各个事件的详细信息,另一个是“实例”表,用于存储每个事件发生的开始和结束时间。
我的问题是:
实例表中的事件到底是如何存储的,例如,如果事件每天都在重复,那么表如何存储事件的每次发生?它需要表中的行数无限,而且这不会需要太多的存储空间吗?一年中每天重复的事件在表中将有 365 个条目,因此存储事件的每次发生不是浪费吗?
我想在Android应用程序中获取当前时间(HH:MM:SEC:MILLISEC).我正在使用这段代码:
Calendar c = Calendar.getInstance();
int time_start = c.get(Calendar.MILLISECOND);
Run Code Online (Sandbox Code Playgroud)
"获取和设置的字段编号表示小时内的分钟.例如,在10:04:15.250 PM,MILLI为250."
我已经查看了其他方法,但是我找不到任何指定它会输出所有内容的东西.无论如何我能得到H:M:Sec:MilliSec?或者我只需要做类似的事情
c.get(Calendar.HOUR).get(Calendar.MINUTE).get(Calendar.SECOND).get(Calendar.MILLISECOND).
Run Code Online (Sandbox Code Playgroud) 我有一个Android应用程序,我想将它用于测试目的,在到期日期后,应用程序必须显示一个对话框并阻止命令.
这里我的代码显示对话框和块命令
public void expired(){
bt1.setEnabled(false)
bt2.setEnabled(false)
bt3.setEnabled(false)
bt4.setEnabled(false)
bt5.setEnabled(false)
Alerts.AppExpiredMessage(Home.this);
}
Run Code Online (Sandbox Code Playgroud)
但如何在表单中设置Android中的到期日期
if(appLicenseExpired){
void expired();
}
Run Code Online (Sandbox Code Playgroud)
验证实际日期是先前设定的到期日期(例如2013年3月3日)?
android ×10
android-calendar ×10
java ×2
reminders ×2
android-4.0-ice-cream-sandwich ×1
database ×1
date ×1
sync ×1
time ×1