2012-09-10 5 views
4

Pour l'une de mes applications, nous devons insérer un événement dans le calendrier.Insertion d'éléments de calendrier dans Android ICS

long calID = 3; 
long startMillis = 0; 
long endMillis = 0;  
Calendar beginTime = Calendar.getInstance(); 
beginTime.set(2012, 8, 10, 7, 30); 
startMillis = beginTime.getTimeInMillis(); 
Calendar endTime = Calendar.getInstance(); 
endTime.set(2012, 8, 10, 8, 45); 
endMillis = endTime.getTimeInMillis(); 
ContentResolver cr = getContentResolver(); 
ContentValues values = new ContentValues(); 
values.put(Events.DTSTART, startMillis); 
values.put(Events.DTEND, endMillis); 
values.put(Events.TITLE, "Jazzercise"); 
values.put(Events.DESCRIPTION, "Group workout"); 
values.put(Events.CALENDAR_ID, calID); 
values.put(Events.EVENT_TIMEZONE, "America/Los_Angeles"); 
Uri uri = cr.insert(CalendarContract.Calendars.CONTENT_URI, values); 
// get the event ID that is the last element in the Uri 
long eventID = Long.parseLong(uri.getLastPathSegment()); 
Log.d("MainActivity", "addCalendarEvents :: " + "eventID :: "+eventID); 

Cursor cursor = cr.query(Events.CONTENT_URI, null, Events.TITLE +"='Jazzercise'", null, null); 
Log.d("MainActivity", "addCalendarEvents :: " + "cursor :: "+cursor.getCount()); 

fourni sur http://developer.android.com/guide/topics/providers/calendar-provider.html Cependant, d'une part, il me donne une erreur

Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar) 

De plus, le nombre de curseur est nul. Quand j'essaie de chercher avec le titre. Note: J'ai essayé d'utiliser le service intents pour ajouter des événements, mais je ne veux pas que l'utilisateur fasse preuve de discrétion en ajoutant l'événement. J'ai testé sur un Galaxy Nexus (4.1) et un Nexus S (4.1).

Toute aide avec l'interface utilisateur correcte qui doit être utilisée avec ICS?

BR, Jayshil

+0

Remarque: Je n'obtiens pas de plantage ou d'erreur explicite. –

+0

Si quelqu'un de la communauté dev essaie ceci dans un périphérique ICS 4.0, ce serait très utile. Si c'est un problème Jellybean ou 4.0 et au-dessus du problème. –

+2

Cette erreur est apparue après la mise à jour de jellybean, j'ai le même problème sur un nexus 7.Sur ICS mon code a fonctionné, après que la mise à jour s'est arrêtée et que logcat a signalé la ligne que vous avez citée. Il offre ensuite com.google.android.calendar comme une alternative, mais si je remplace cela dans mon code, cela ne fonctionne toujours pas. –

Répondre

3

Je l'ai compris. La ligne:

Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar) 

est un leurre complet (à savoir non pertinente). C'est simplement un code d'infrastructure qui effectue un travail d'infrastructure, as seen here.


Le problème réside dans la documentation - si vous êtes comme moi, vous avez probablement prévu long calID = 3; être une pièce d'identité valide du calendrier. Ce n'est pas un ID valide, c'est un espace réservé pour la documentation. Ce que vous faites avec le code ci-dessus, si vous utilisez un émulateur vide, insère une entrée dans un calendrier inexistant, c'est-à-dire visible nulle part.

Ce que vous avez besoin est de:

  1. Query for and choose an existing calendar. Une fois de plus - sur l'émulateur, il n'y a pas de calendrier par défaut.
  2. Utilisez l'ID de calendrier réel obtenu pour insérer l'événement.

En bref - les messages de documentation et de débogage ne sont pas assez idiot;).

+1

aimé la dernière ligne .. je viens de trouver la même solution quelques jours en arrière .. Et avoir à vous remettre ... –

+1

entre le dernier doc sont beaucoup mieux .. ils vous laissent d'abord interroger les calendriers, puis montrer comment insérer. –

0

Avez-vous les autorisations correctes dans le fichier manifest?

<uses-permission android:name="android.permission.READ_CALENDAR" /> 
<uses-permission android:name="android.permission.WRITE_CALENDAR" /> 

Cela peut être une partie de la cause de l'erreur que vous voyez.

+0

Oui, j'ai ces autorisations. –

0
content://com.android.calendar - problem is here. 

Ses calendriers.

Essayez avec ce code:

Uri mCalendarsUri; 
if (Build.VERSION.SDK_INT >= 8) { 
    mCalendarsUri = Uri.parse("content://com.android.calendar/calendars"); 
} else { 
    mCalendarsUri = Uri.parse("content://calendar/calendars"); 
}