2013-02-01 7 views
0

Je crée un calendrier avec un calendrier. Ma question est, quand j'ai besoin de créer un nouvel événement, j'appelle l'activité par ce code.Comment appeler le calendrier des événements sans afficher le calendrier?

public void callEventDialog(int line, int column){ 
    Intent intent = new Intent(Intent.ACTION_EDIT); 
    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(startWeek.getTimeInMillis() + column * DIM + line * 30 * 60 * 1000); 
    intent.setType("vnd.android.cursor.item/event"); 
    intent.putExtra(Events.TITLE, "title"); 
    intent.putExtra(Events.DTSTART, c.getTimeInMillis()); 
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, c.getTimeInMillis()); 
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, c.getTimeInMillis() + 1800 * 1000); 
    intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    startActivityForResult(intent, 100); 
} 

Mais quand je clique sur le bouton OK, je ne veux pas voir l'activité du calendrier. Je n'ai besoin que de l'enregistrement de l'événement et non du calendrier. Comment puis-je faire ceci??? Merci pour votre temps et aider

enter image description here

Répondre

1

Si vous voulez ajouter un événement directement au calendrier, vous devez utiliser résolveur contenu et demande des autorisations calendrier - aucune activité civile est utilisée.

Permission de votre manifeste:

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

événement Mise en exemple de base de données:

public static int insertEventToDb(Context context, Event event, int calendarId) { 
    ContentValues values = new ContentValues(); 

    values.put(Events.CALENDAR_ID, calendarId); 
    values.put(Events.TITLE, event.getName()); 
    values.put(Events.EVENT_LOCATION, event.getLocation()); 
    values.put(Events.DTSTART, event.getStartDate().getTime()); 
    values.put(Events.DTEND, event.getEndDate().getTime()); 
    values.put(Events.DESCRIPTION, event.getDescription()); 
    values.put(Events.EVENT_TIMEZONE, TimeZone.getTimeZone("GMT+1").getID()); 

    Uri result = context.getContentResolver().insert(Events.CONTENT_URI, values); 
    int eventId = Integer.valueOf(result.getPathSegments().get(1)); 
    return eventId; 
} 

Vous devez également ID du calendrier que vous souhaitez insérer des données. Vous pouvez obtenir cela en utilisant la requête SQLite pour le trouver ou en créant votre propre calendrier (cela devrait être fait uniquement via SyncAdapter). Ceci est un autre exemple, vous aurez probablement besoin de le modifier par vos besoins (Constants.ACCOUNT_TYPE est mon habitude):

Uri uri = Calendars.CONTENT_URI.buildUpon() 
       .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true") 
       .appendQueryParameter(Calendars.ACCOUNT_NAME, "LOCAL") 
       .appendQueryParameter(Calendars.ACCOUNT_TYPE, Constants.ACCOUNT_TYPE).build(); 
Cursor cursor = context.getContentResolver().query(uri, new String[] {Calendars._ID}, null, null, null); 

Vous trouverez de plus amples informations sur Android Developers site - Calendar Provider.

Questions connexes