获取我的应用在 android 日历中添加的事件
Get events added by my app in android calendar
在我的应用程序中,我在屏幕上的 google 日历中添加了一些事件。当用户再次来到屏幕时,它会再次添加事件,因此在日历中重复的事件也是可见的。
所以在添加任何新事件之前,我想检查该事件是否已经存在。如果我获取日历的所有事件并对其进行迭代,我的应用程序会变得非常慢或挂起并显示通知
too many calendar deletes
我用来插入值的代码是:
final ContentValues event = new ContentValues();
event.put(CalendarContract.Events.CALENDAR_ID, calendarId);
event.put(CalendarContract.Events.TITLE, name);
event.put(CalendarContract.Events.DTSTART, millisstarttime);
event.put(CalendarContract.Events.DTEND, millisendtime);
event.put(CalendarContract.Events.EVENT_LOCATION, venue);
event.put(CalendarContract.Events.ALL_DAY, 0); // 0 for false, 1 for true
event.put(CalendarContract.Events.HAS_ALARM, 1);
event.put(CalendarContract.Events.ACCESS_LEVEL, CalendarContract.Events.ACCESS_PRIVATE);
event.put(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);// 0 for false, 1 for true
String timeZone = TimeZone.getDefault().getID();
event.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone);
this.getContentResolver().insert(baseUri, event);
我正在尝试获取值:
private void deleteeve(ContentResolver cr,int calendarId) {
String[] projection = {CalendarContract.Events._ID,
CalendarContract.Events.CUSTOM_APP_PACKAGE,CalendarContract.Events.CALENDAR_ID,CalendarContract.Events.ORGANIZER};
// Get a Cursor over the Events Provider.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
return;
}
Cursor cursor = getContentResolver().query(
CalendarContract.Events.CONTENT_URI, projection,"calendar_id=" + calendarId, null,
null);
assert cursor != null;
cursor.moveToFirst();
String idsToDelete = "";
int nameIdx = cursor.getColumnIndexOrThrow(CalendarContract.Events.CUSTOM_APP_PACKAGE);
int id=cursor.getColumnIndexOrThrow(CalendarContract.Events._ID);
int org=cursor.getColumnIndexOrThrow(CalendarContract.Events.ORGANIZER);
while (cursor.moveToNext()) {
// Extract the name.
String name = cursor.getString(nameIdx);
String apppackage = getApplicationContext().getPackageName();
String organizer=cursor.getString(org);
String idevent = cursor.getString(id);
for (int i = 0; i < cursor.getCount(); i++) {
if (apppackage.equals(name)) {
// MY CODE
}
}
}
}
我尝试使用包名称获取事件,那么除了遍历所有事件之外,还有什么方法可以只获取我的应用程序添加的事件吗?
如果您不想为您的应用创建新的日历,您可以试试这个。
Cursor cursor = getContentResolver().query(
CalendarContract.Events.CONTENT_URI, projection, CalendarContract.Events.CUSTOM_APP_PACKAGE = getApplicationContext().getPackageName(), null,
null);
我自己修好了。
我正在尝试一切正确。它挂起是因为它试图删除主线程上的 200 个事件。
我唯一做的就是在单独的线程中开始删除和保存事件。
Thread mThread = new Thread(new Runnable(){
@override
public void run(){
//MY stuff
}
});
就这些了。
在我的应用程序中,我在屏幕上的 google 日历中添加了一些事件。当用户再次来到屏幕时,它会再次添加事件,因此在日历中重复的事件也是可见的。 所以在添加任何新事件之前,我想检查该事件是否已经存在。如果我获取日历的所有事件并对其进行迭代,我的应用程序会变得非常慢或挂起并显示通知
too many calendar deletes
我用来插入值的代码是:
final ContentValues event = new ContentValues();
event.put(CalendarContract.Events.CALENDAR_ID, calendarId);
event.put(CalendarContract.Events.TITLE, name);
event.put(CalendarContract.Events.DTSTART, millisstarttime);
event.put(CalendarContract.Events.DTEND, millisendtime);
event.put(CalendarContract.Events.EVENT_LOCATION, venue);
event.put(CalendarContract.Events.ALL_DAY, 0); // 0 for false, 1 for true
event.put(CalendarContract.Events.HAS_ALARM, 1);
event.put(CalendarContract.Events.ACCESS_LEVEL, CalendarContract.Events.ACCESS_PRIVATE);
event.put(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);// 0 for false, 1 for true
String timeZone = TimeZone.getDefault().getID();
event.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone);
this.getContentResolver().insert(baseUri, event);
我正在尝试获取值:
private void deleteeve(ContentResolver cr,int calendarId) {
String[] projection = {CalendarContract.Events._ID,
CalendarContract.Events.CUSTOM_APP_PACKAGE,CalendarContract.Events.CALENDAR_ID,CalendarContract.Events.ORGANIZER};
// Get a Cursor over the Events Provider.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
return;
}
Cursor cursor = getContentResolver().query(
CalendarContract.Events.CONTENT_URI, projection,"calendar_id=" + calendarId, null,
null);
assert cursor != null;
cursor.moveToFirst();
String idsToDelete = "";
int nameIdx = cursor.getColumnIndexOrThrow(CalendarContract.Events.CUSTOM_APP_PACKAGE);
int id=cursor.getColumnIndexOrThrow(CalendarContract.Events._ID);
int org=cursor.getColumnIndexOrThrow(CalendarContract.Events.ORGANIZER);
while (cursor.moveToNext()) {
// Extract the name.
String name = cursor.getString(nameIdx);
String apppackage = getApplicationContext().getPackageName();
String organizer=cursor.getString(org);
String idevent = cursor.getString(id);
for (int i = 0; i < cursor.getCount(); i++) {
if (apppackage.equals(name)) {
// MY CODE
}
}
}
}
我尝试使用包名称获取事件,那么除了遍历所有事件之外,还有什么方法可以只获取我的应用程序添加的事件吗?
如果您不想为您的应用创建新的日历,您可以试试这个。
Cursor cursor = getContentResolver().query(
CalendarContract.Events.CONTENT_URI, projection, CalendarContract.Events.CUSTOM_APP_PACKAGE = getApplicationContext().getPackageName(), null,
null);
我自己修好了。 我正在尝试一切正确。它挂起是因为它试图删除主线程上的 200 个事件。 我唯一做的就是在单独的线程中开始删除和保存事件。
Thread mThread = new Thread(new Runnable(){
@override
public void run(){
//MY stuff
}
});
就这些了。