2010-12-07 18 views
20

Quiero abrir la aplicación Calendario desde una aplicación de Android. Cuando busqué en línea, todo lo que obtuve es crear nuevos eventos con intención. Pude encontrar Intents para abrir Contactos y Galería, etc.Cómo iniciar la aplicación Android Calendar usando Intent (Froyo)

¿Es posible iniciar el Calendario en una semana o día específicos? Si es posible, ¿podría alguien ayudarme con eso?

Gracias de antemano.

+0

Lo intenté, pero me dio una excepción de permiso denegado –

Respuesta

19
Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setType("vnd.android.cursor.item/event"); 
intent.putExtra("title", "Some title"); 
intent.putExtra("description", "Some description"); 
intent.putExtra("beginTime", eventStartInMillis); 
intent.putExtra("endTime", eventEndInMillis); 
startActivity(intent); 
+0

cuando probé esto recibí el siguiente error ... Causado por: android.content.ActivityNotFoundException: No se encontró actividad para manejar el intento {act = android.intent.action.EDIT typ = vnd.android. cursor.item/event (tiene extras)} ... ¿podría darme una solución? ion en esto.? –

+6

@TijoKVarghese: asegúrese de ejecutar o depurar su aplicación en un teléfono Android en lugar de emulador. Escuché que Android Calendar no está empaquetado por defecto en la imagen del emulador. –

+1

ok..i comprobaré esto con el dispositivo real ... hasta ahora había probado solo en el emulador de Android. –

0

Por un proceso de experimentación tediosa, me he dado cuenta que:

Intent calendarIntent = new Intent() ;
calendarIntent.setClassName("com.android.calendar","com.android.calendar.AgendaActivity");

... funciona para mí para poner en marcha la Agenda de Actividades de la Agenda. No se ha intentado , pero quizás com.android.calendar.DayActivity, .WeekActivity y .MonthActivity lanzará las actividades correspondientes .

1

AgendaActivity carga la vista "Agenda".

Según mi experiencia, no se puede vincular en profundidad las actividades de día, semana y mes disponibles en Android, sin embargo, puede usar "LaunchActivity" que carga la última vista abierta.

3

Después de revisar la Aplicación de calendario en el código fuente de Android, solo puede invocar la AgendaActivity directamente. Los otros no funcionarán Como han señalado los otros carteles, puede interactuar directamente con el cursor para leer/crear eventos, pero no puede invocar la aplicación de calendario a una vista que no sea AgendaView. La razón es que los desarrolladores han limitado la capacidad de que en el manifiesto de la aplicación Cal mediante el uso de las siguientes definiciones de actividad:

<activity android:name="MonthActivity" android:label="@string/month_view" 
     android:theme="@style/CalendarTheme" /> 
    <activity android:name="WeekActivity" android:label="@string/week_view" 
     android:theme="@style/CalendarTheme" /> 
    <activity android:label="@string/day_view" android:name="DayActivity"  
     android:theme="@style/CalendarTheme"/> 
    <activity android:name="AgendaActivity" android:label="@string/agenda_view" 
     android:theme="@android:style/Theme.Light" 
     android:exported="true" /> 

Tenga en cuenta que sólo el AgendaActivity tiene androide: exportados = "true". Si intenta llamar a las otras actividades obtendrá una excepción de permiso.

Sin embargo, puede invocar el AgendaActivity a un día arbitrario con el siguiente código:

Calendar tempCal = (Calendar) mCalendar.clone(); 
    tempCal.set(year, month, day); 
    Intent calendarIntent = new Intent() ; 
    calendarIntent.putExtra("beginTime", tempCal.getTimeInMillis()); 
    calendarIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    calendarIntent.setClassName("com.android.calendar","com.android.calendar.AgendaActivity"); 
    startActivity(calendarIntent); 
3

Usando intentos para ver los datos del calendario

Calendario proveedor ofrece dos maneras diferentes de utilizar la vista de Intención:

To open the Calendar to a particular date. 
To view an event. 

permisos para agregar, para manifestar

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

Aquí es un ejemplo que muestra cómo abrir el calendario a una fecha determinada:

// A date-time specified in milliseconds since the epoch. 
long startMillis; 
... 
Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); 
builder.appendPath("time"); 
ContentUris.appendId(builder, startMillis); 
Intent intent = new Intent(Intent.ACTION_VIEW) 
    .setData(builder.build()); 
    startActivity(intent); 

Aquí es un ejemplo que muestra cómo abrir un evento para su visualización:

long eventID = 208; 
... 
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); 
Intent intent = new Intent(Intent.ACTION_VIEW) 
    .setData(uri); 

    startActivity(intent); 

Is it possible to launch the Calendar to a specific week or day?

Por lo tanto, ahora es posible, pero requiere min API 14.

Para más detalles visita http://developer.android.com/guide/topics/providers/calendar-provider.html#intents

+0

Esto funciona muy bien en API => 14. ¿Alguna idea de si el intento de visualización puede manejar otros parámetros, además del "tiempo"? Para abrir un período de tiempo (semana, mes), por ejemplo? – AndreasEK

8

puede abrir Calendario Vista por dos medios:

1) por determinada fecha 2) por un evento particular

Para ello hay que añadir después de dos permisos

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

1) por fecha en particular:

Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); 
builder.appendPath("time"); 
ContentUris.appendId(builder, Calendar.getInstance().getTimeInMillis()); 
Intent intent = new Intent(Intent.ACTION_VIEW) 
    .setData(builder.build()); 
startActivity(intent); 

2) por un evento particular:

long eventID = 200; 

Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); 
Intent intent = new Intent(Intent.ACTION_VIEW).setData(uri); 
startActivity(intent); 

Nota: se añadió CalendarContract proveedor de contenido para el SDK de Android en la API de nivel 14. Para obtener más información, puede visitar esta link

Cuestiones relacionadas