2010-10-26 17 views
1

Je développe une application Android qui crée un calendrier sur le téléphone la première fois que l'application est installée. Lorsque je crée un événement, que ce soit par programmation ou en utilisant le périphérique lui-même, l'événement apparaîtra dans le calendrier mais son titre est manquant. Je suis en train de tester mon code sur HTC Nexus One. Comme je reçois le même comportement lors de la création de l'événement via mon code ou via l'appareil, je soupçonne qu'il y a un problème dans le code que j'ai écrit pour créer un nouveau compte de calendrier. Je le fais en ajoutant un nouveau champ dans les calendriers tableau de la base de données calendar.db, dont l'URI est: « contenu: //com.android.calendar/calendars »Après avoir ajouté un événement à un calendrier créé par l'utilisateur dans Android, le titre de l'événement ne s'affiche pas

private Uri addNewCalendar() { 

    if (!calendarExists()) { 

     ContentResolver contentResolver = mContext.getContentResolver(); 

     ContentValues cv = new ContentValues(); 
     cv.put(Calendar.Calendars._SYNC_ACCOUNT, mAccount.name); 
     cv.put(Calendar.Calendars._SYNC_ACCOUNT_TYPE, mAccount.type); 
     cv.put(Calendar.Calendars._SYNC_TIME, new Date().getTime()); 
     cv.put(Calendar.Calendars.URL, "http://www.example.com"); 
     cv.put(Calendar.Calendars.NAME, mAccount.name); 
     cv.put(Calendar.Calendars.DISPLAY_NAME, mAccount.name); 
     cv.put(Calendar.Calendars.HIDDEN, 0); 
     cv.put(Calendar.Calendars.COLOR, 14417920); 
     cv.put(Calendar.Calendars.ACCESS_LEVEL, 700); 
     cv.put(Calendar.Calendars.SELECTED, 1); 
     cv.put(Calendar.Calendars.SYNC_EVENTS, 1); 
     cv.put(Calendar.Calendars.TIMEZONE, "GMT"); 
     cv.put(Calendar.Calendars.OWNER_ACCOUNT, mAccount.name); 

     Uri uri = contentResolver.insert(Calendar.Calendars.CONTENT_URI.buildUpon().build(), cv); 

     return uri; 
     } 
     return null; 
    } 

En outre, En vérifiant si le champ de titre de l'événement est réellement écrit dans la base de données, j'ai trouvé qu'il était enregistré correctement. Je peux voir le titre de l'événement lorsque j'essaie d'éditer l'événement sur le téléphone.

Quelqu'un at-il une idée de la raison de ce problème? Si vous avez besoin de plus d'informations, s'il vous plaît faites le moi savoir.

+0

@ user487750: S'il vous plaît utiliser l'API Google Calendar GData pour manipuler Google Calendrier d'un utilisateur. – CommonsWare

+1

Merci CommonsWare, mais j'ai mon propre serveur de calendrier, et mon application Android est censé synchroniser les événements de ce serveur et les enregistrer dans l'application de calendrier Android. Je n'utilise pas de compte Google Agenda. Est-ce faisable avec Google Calendar API? – Moe

Répondre

0

S'il vous plaît essayer ce code espoir répondre à votre question:

public int addEvent(String title, String location, String detail, 
     long from, long to, int reminder, boolean update, int id) { 
    ContentValues event = new ContentValues(); 
    Uri url = null; 
    event.put("calendar_id", "1"); 
    // event.put("_id", id); 
    event.put("title", title); 
    event.put("description", detail); 
    event.put("eventLocation", location); 

    // startTime = System.currentTimeMillis(); 
    /* 
    * try { Thread.sleep(5000); } catch (InterruptedException e) { 
    * e.printStackTrace(); } 
    */ 
    // endTime = System.currentTimeMillis(); 
    event.put("dtstart", startTime); 
    event.put("dtend", endTime); 
    event.put("allDay", 0); // 0 for false, 1 for true 
    event.put("eventStatus", 1); 
    event.put("visibility", 0); 
    event.put("transparency", 0); 
    event.put("hasAlarm", reminder); // 0 for false, 1 for true 

    String contentProvider; 
    if (Build.VERSION.RELEASE.contains("2.2") 
      || Build.VERSION.RELEASE.contains("2.3")) 
     contentProvider = "com.android.calendar"; 
    else 
     contentProvider = "calendar"; 

    Uri remindersUri = Uri.parse(String.format("content://%s/reminders", 
      contentProvider)); 
    Uri eventsUri = Uri.parse(String.format("content://%s/events", 
      contentProvider)); 
    Uri calendars = Uri.parse(String.format("content://%s/calendars", 
      contentProvider)); 
    if (update) 
     getContentResolver().update(eventsUri, event, "event_id=?", 
       new String[] {})/* ate(eventsUri, event) */; 
    // retCode = db.update(SQLiteDBHandler.EVENT_TABLE, values, "_id=?", new 
    // String[]{id+""}); 
    else 
     url = getContentResolver().insert(eventsUri, event); 
    String eventid = url.getPathSegments().get(
      url.getPathSegments().size() - 1); 
    if (reminder == 1) { 
     event = new ContentValues(); 
     event.put("event_id", eventid); 
     event.put("minutes", reminder_time); 
     event.put("method", 1); 
     getContentResolver().insert(remindersUri, event); 
     /* 
     * try{ Cursor curs = getContentResolver().query(remindersUri, null, 
     * null, null, null); curs.getColumnName(3); }catch (Exception e) { 
     * // TODO: handle exception e.printStackTrace(); } 
     */ 
    } 
    return Integer.parseInt(eventid); 
}