2012-03-07 16 views
5

Después del lanzamiento de la clase android 4, CalendarContract es introducir el evento de escritura en el calendario del dispositivo. Pero si he creado mi aplicación usando API nivel 8 y ahora quiero usar esta clase CalendarContract en mi proyecto hecho usando API nivel 8, porque en API nivel 8 uso API no documentada para escribir evento en el calendario del dispositivo y este código doen ' t funciona para Android 4. Entonces, ¿es posible usar la clase CalendarContract en mi proyecto sin cambiar la versión sdk en el archivo manifiesto, porque si cambio la versión sdk a 14 entonces me permite usar la clase CalendarContract y puedo resolver la problema para Android 4. Pero al hacerlo, mi aplicación no comenzó a ejecutarse en api 8 -13, y que no quiero hacer porque mi aplicación es en vivo en el mercado. Entonces, ¿hay alguna manera posible de resolver este problema? Por favor, explique mí con un ejemploCómo usar la clase CalendarContract en el nivel de la API 8

Respuesta

0

encontrar una manera de encontrar el nivel de la API mediante programación ... si se puede entonces probablemente usted puede utilizar código apropiado para niveles diff Api ... esto puede ayudar Programmatically obtain the Android API level of a device?

+0

Eso lo sé, pero después de encontrar el nivel Api, ¿qué debo hacer? Puede explicarme – Rahul

+0

usted crea una biblioteca que tiene un método para obtener eventos ... tome el nivel api como argumento y en base a eso use la forma apropiada para obtener eventos .. – ngesh

+0

me puedes mostrar con un ejemplo. No sé cómo crear mi propia biblioteca y cómo agregar un método para obtener eventos – Rahul

3

No puede utilizar CalendarContract en dispositivos Android con menos de Nivel API 14.

+0

Eso significa que no puedo resolver mi problema. ¿Por qué mi código anterior para escribir evento en el calendario del dispositivo no funciona? No funciona para Android 4. ¿Es porque he usado Api no documentado? ¿Hay alguna forma de resolver esto? – Rahul

+0

Resumir el acceso al calendario y tener diferentes implementaciones de la interfaz de acceso al calendario, una para la interfaz anterior y no confiable del calendario y otra para CalendarContract. – Jens

+0

puede por favor explicarme con un simple ejemplo. No tengo idea de eso. – Rahul

3

Me las arreglé para solucionar este problema hoy uniendo diferentes consejos encontrados en SO y en la web más amplia.

Básicamente utilizo un vigilante llamado CallendarAccess, y dos clases con la misma estructura método público, uno llamado CalendarLT14 en el que el método llama determinación de la forma no documentada de edad, y CalendarGTE14 que utilizó el Android correcta V14 + forma de hacer las cosas.

Ambas estas clases se extienden un auto escrito clase abstracta llamada CalendarService que contienen métodos abstractos comunes a los públicos de CalendarLT14 y CalendarGTE14.

Un problema al hacer esto es que las versiones de Android menores que IceCreamSandwich (v14) no compilarán código como CalendarContract callendarContact; que está escrito para versiones posteriores. Para resolver esto, establece en el manifiesto la versión de destino a 14 (Android 4.0), pero la versión mínima a 7 (android 2.1). Esto significa que el código 4.0 compila y no presenta ningún problema con las versiones anteriores porque nunca se invoca. Método de ejemplo del cuidador a continuación.

public CalendarService getInstance() 
{ 
    if (Build.VERSION.SDK_INT >= 14) 
      return CalendarGTE14(context) 
    else 
      return CalendarLT14 
} 

Esta solución significa que el cuidador pueda regresar de forma selectiva un objeto que va a resolver con el código correcto correspondiente a la versión de Android en uso y totalmente transparente para el programador realizar llamadas al cuidador o CalendarService clase.

Cuestiones relacionadas