2017-07-07 206 views
0

在我的應用中,我在屏幕上的Google日曆中添加了一些事件。當用戶再次進入屏幕時,它會再次添加事件,以便在日曆中重複事件也可見。 因此,在添加任何新事件之前,我想檢查事件是否已經存在。如果我有日曆的所有事件和遍歷它,我的應用程序變得很慢或通知掛起獲取我的應用在Android日曆中添加的事件

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 
      } 

     } 
    } 

} 

我試圖讓使用包名的事件,所以,反正是有得到的事件僅我的應用程序添加,比遍歷所有的其他事件?

+0

您使用哪個calendar_id? –

+0

@JohnKalimeris我的一個Google帳戶的日曆ID。 –

+0

您可以爲您的應用程序創建新的本地日曆並存儲您的活動。然後你只能查詢這個日曆中的所有事件。如果您願意,我可以爲您提供一些幫助代碼。 –

回答

0

我自己修復它。 我正在嘗試一切正確。它掛起,因爲它試圖刪除主線程上的200個事件。 我唯一做的事情是在sepatate Thread中開始刪除和保存事件。

Thread mThread = new Thread(new Runnable(){ 
@override 
public void run(){ 
    //MY stuff 
} 

}); 

這就是所有。

0

如果您不想爲您的應用程序創建新日曆,那麼可以嘗試此操作。

Cursor cursor = getContentResolver().query(
     CalendarContract.Events.CONTENT_URI, projection, CalendarContract.Events.CUSTOM_APP_PACKAGE = getApplicationContext().getPackageName(), null, 
     null); 
相關問題