2011-03-20 16 views
5

Hay muchos ejemplos sobre cómo crear un nuevo evento de calendario en Android, pero ninguno sobre cómo abrir y mostrar un evento. Este es mi código hasta el momentoAbrir y mostrar el evento del calendario en Android

public static void startCalendarMimeType(Context context, CalendarItem item){ 
    //all version of android 
    Intent i = new Intent(); 

    // mimeType will popup the chooser any for any implementing application (e.g. the built in calendar or applications such as "Business calendar" 
    i.setType("vnd.android.cursor.item/event"); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    // the time the event should start in millis. This example uses now as the start time and ends in 1 hour 
    //i.putExtra("beginTime", item.getBegin()); 
    //i.putExtra("endTime", item.getEnd()); 
    i.putExtra("_id", item.getId()); 


    // the action 
    //i.setAction(Intent.ACTION_PICK); 
    context.startActivity(i); 
} 

El elemento de Calendario contiene información ya recuperada del calendario utilizando la resolución de contenido. Cuando un usuario hace clic en mi elemento, quiero que abra el calendario de Android que muestra el elemento.

En este momento puede seleccionar una aplicación para abrir con, si selecciona "Mostrar evento", abre la aplicación de calendario pero obtiene una excepción de nullpointer y no puedo entender lo que estoy haciendo mal aquí. Soy el primero que trato de hacer esto?

Cualquier ayuda muy apreciada

Respuesta

2

Hay muchos ejemplos sobre cómo crear un nuevo evento de calendario en el androide

Ninguno de los "ejemplos" se debe utilizar, ya que no hay documentado y API compatible para un calendario en Android.

pero ninguno sobre cómo abrir y mostrar un evento

Usted tendría que ponerse en contacto con los autores del programa de calendario que sea de otro fabricante que está tratando de integrarse y preguntarles cómo hacer que la integración . Si intenta integrarse con la aplicación Calendario que es parte del proyecto de código abierto de Android, no hay una API documentada y compatible para esa aplicación.

+0

cierto, pero el ejemplo anterior funciona para el evento de edición, pero de alguna manera da un nullpointer cuando solo quiero ver un elemento. Esto se puede hacer, simplemente no sé cómo ... todavía. – Alex

11

fin encontré la solución:

Intent intent = new Intent(Intent.ACTION_VIEW); 
//Android 2.2+ 
intent.setData(Uri.parse("content://com.android.calendar/events/" + String.valueOf(calendarEventID))); 
//Android 2.1 and below. 
//intent.setData(Uri.parse("content://calendar/events/" + String.valueOf(calendarEventID)));  
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
     | Intent.FLAG_ACTIVITY_SINGLE_TOP 
     | Intent.FLAG_ACTIVITY_CLEAR_TOP 
     | Intent.FLAG_ACTIVITY_NO_HISTORY 
     | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
context.startActivity(intent); 

espero que algunos de ustedes encuentran esto muy útil.

También he añadido algunas otras Intentos de calendario a continuación:

/** 
* Add a calendar event. 
*/ 
private void addCalendarEvent(){ 
    Context context = getContext(); 
    Intent intent = new Intent(Intent.ACTION_EDIT); 
    intent.setType("vnd.android.cursor.item/event"); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP 
      | Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | Intent.FLAG_ACTIVITY_NO_HISTORY 
      | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
    context.startActivity(intent); 
} 

/** 
* Edit a calendar event. 
*/ 
private void editCalendarEvent(){ 
    Context context = getContext(); 
    long calendarEventID = ..... 
    intent.setData(Uri.parse("content://com.android.calendar/events/" + String.valueOf(calendarEventID))); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
     | Intent.FLAG_ACTIVITY_SINGLE_TOP 
     | Intent.FLAG_ACTIVITY_CLEAR_TOP 
     | Intent.FLAG_ACTIVITY_NO_HISTORY 
     | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
    context.startActivity(intent); 
} 

Déjame saber si alguien tiene alguna pregunta o tiene una mejor manera de realizar la misma tarea.

+0

Gran respuesta hombre. Sin embargo, cuando ejecuto el código para ver un evento, mis fechas siempre parecen regresar en diciembre de 1969. ¿Tiene alguna idea de qué podría estar causando esto? –

+0

para editar usa calendarEventID, pero no pones cómo obtener esa identificación al crear el evento –

+0

Como 'FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET' está en desuso, podemos usar' FLAG_ACTIVITY_NEW_DOCUMENT 'Ref: https: //stackoverflow.com/a/33179077/2462531 –

Cuestiones relacionadas