0

Dans mon application, j'ajoute un événement dans le calendrier Google sur un écran. Lorsque l'utilisateur revient à l'écran, il ajoute à nouveau les événements. Dans l'agenda, l'événement dupliqué est également visible. Donc avant d'ajouter un nouvel événement, je veux vérifier si l'événement existe déjà. Si je reçois tous les événements du calendrier et itérer dessus, mon application devient très lent ou se bloque avec une notificationObtenir les événements ajoutés par mon application dans le calendrier android

too many calendar deletes 

Le code que j'utilise pour insérer les valeurs est:

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); 

et je suis en train d'obtenir les valeurs:

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 
      } 

     } 
    } 

} 

J'ai essayé d'obtenir les événements à l'aide nom du package, donc il est de toute façon d'obtenir les événements ajoutés par mon application ne, autre que itérer sur tous les événements?

+0

quel calendrier utilisez-vous? –

+0

@JohnKalimeris Identifiant du calendrier d'un de mes comptes Google. –

+0

Vous pouvez créer un calendrier local pour votre application et stocker vos événements. Et puis vous pouvez interroger tous les événements de ce calendrier seulement. Je peux vous fournir du code pour de l'aide si vous le souhaitez. –

Répondre

0

Je l'ai corrigé moi-même. J'essayais tout correct. Il était suspendu parce qu'il essayait de supprimer 200 événements sur le fil principal. La seule chose que j'ai faite a été de commencer la suppression et la sauvegarde des événements dans un thread séparé.

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

}); 

C'est tout.

0

Vous pouvez essayer ceci si vous ne souhaitez pas créer de nouveau calendrier pour votre application.

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