2012-03-05 19 views
5

Uso la API no documentada para agregar eventos de calendario para Android OS 2.2. Ahora que salió Android OS 4, ¡naturalmente las API que utilicé no funcionan! Miré el SDK de Android con respecto a las api del calendario en el nivel 14, pero no pude encontrar una pista sobre cómo usar esto en mi proyecto que he creado con Android OS 2.2. Porque cuando uso la clase CalendarContract en mi proyecto, muestra un error. Así que no puedo encontrar la pista de qué hacer y cómo usar esta clase en mi proyecto que he creado con Android OS 2.2.Android integración de calendario en Android OS 4

Si alguien tiene alguna muestra para compartir o un enlace a las muestras, por favor hágamelo saber.

Clase Calendario API de la clase

public abstract class CalendarAPI 
{ 
private static CalendarAPI api; 

public static CalendarAPI getAPI() 
{ 
    String apiClass; 
    if (Integer.parseInt(Build.VERSION.SDK) > Build.VERSION_CODES.FROYO) { 
     apiClass = "com.example.calendar.CycleManagerSDK8 "; 
    } else { 
     apiClass = "com.example.calendar.CycleManagerSDK14 "; 
    } 

    try 
    { 
     Class<? extends CalendarAPI> realClass = Class.forName(apiClass).asSubclass(CalendarAPI.class); 
     api = realClass.newInstance(); 
    } 
    catch (Exception e) 
    { 
     throw new IllegalStateException(e); 
    } 

    return api; 
} 

public abstract boolean setAlertOnDevice(Context c) ; 
} 

para SDKVersion 8 - 13

public class CycleManagerSDK8 extends CalendarAPI 
{ 
public boolean setAlertOnDevice(Context c) 
{     
    Resources res = c.getResources(); 

    Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events"); 

    Uri REMINDERS_URI = Uri.parse("content://com.android.calendar/" + "reminders"); 

     ContentResolver cr = c.getContentResolver(); 

    Date dtStartDate = getStartDate(); 

    Calendar cal = Calendar.getInstance(); 

    cal.setTime(dtStartDate); 
    cal.add(Calendar.DATE, m_iStart); 

    cal.set(Calendar.HOUR_OF_DAY, 8); 
    cal.set(Calendar.MINUTE, DEFAULT_TIME_OF_DATE);  
    cal.set(Calendar.SECOND, DEFAULT_TIME_OF_DATE); 
    cal.set(Calendar.MILLISECOND, DEFAULT_TIME_OF_DATE); 

    String str = m_reminderText + res.getString(R.string.alert_start);           
    m_strDescription = res.getString(R.string.alert_start_msg); 

    ContentValues values = new ContentValues(); 
    values.put("calendar_id", 1); 
    values.put("title", str); 
    values.put("description", m_strDescription);      
    values.put("dtstart", cal.getTimeInMillis()); 
    values.put("dtend", cal.getTimeInMillis()); 
    values.put("hasAlarm", 1); 
    Uri event = cr.insert(EVENTS_URI, values); 

    m_calendarEvents[m_calendarEventCount] = event; 
    m_calendarEventCount = m_calendarEventCount + 1; 

    values = new ContentValues(); 
    values.put("event_id", Long.parseLong(event.getLastPathSegment())); 
    values.put("method", 1); 
    values.put("minutes", 10); 
    cr.insert(REMINDERS_URI, values); 
} 

}

clase para SDKVersion 14

public class CycleManagerSDK14 extends CalendarAPI 
{ 
     public void setAlertOnDevice(Context c) 
    { 
     long startMillis = 0; 
     long endMillis = 0;  
     Calendar beginTime = Calendar.getInstance(); 
     beginTime.set(2012, 2, 2, 7, 0); 
     startMillis = beginTime.getTimeInMillis(); 
     Calendar endTime = Calendar.getInstance(); 
     endTime.set(2012, 2, 2, 7, 0); 
     endMillis = endTime.getTimeInMillis(); 

     ContentResolver cr = getContentResolver(); 
     ContentValues values = new ContentValues(); 

     values.put(CalendarContract.Events.DTSTART, startMillis); 
     values.put(CalendarContract.Events.DTEND, endMillis); 
     values.put(CalendarContract.Events.TITLE, "Walk The Dog"); 
     values.put(CalendarContract.Events.DESCRIPTION, "My dog is bored, so we're going on a really long walk!"); 
     values.put(CalendarContract.Events.CALENDAR_ID, 1); 
     values.put(CalendarContract.Events.EVENT_TIMEZONE, "eventTimezone"); 
      cr.insert(CalendarContract.Events.CONTENT_URI, values); 
    } 

}

Gracias.

+1

pl. publique su error o excepción – Vinay

+0

clase no encontrada excepción en CalendarContract – Rahul

Respuesta

3

Según entiendo, usted tiene 2 problemas ...

  1. Necesita acceder a Calendario de 2.2 (API 8 y superior)
  2. De API 14, es necesario utilizar CalendarContract para acceder al Calendario

Mi sugerencia sería Crear una clase abstracta y definir la implementación individual.

Por ejemplo

String apiClass; 
if (Integer.parseInt(Build.VERSION.SDK) > Build.VERSION_CODES.DONUT) { 
    apiClass = "com.example.calendar.version8plus"; 
} else { 
    apiClass = "com.example.calendar.version14plus"; 
} 

try { 
    Class<? extends CalendarAPI> realClass = Class.forName(apiClass).asSubclass(CalendarAPI.class); 
    api = realClass.newInstance(); 
} catch (Exception e) { 
    throw new IllegalStateException(e); 
} 

Con ello, se crea dos implementación diferente según las apis ...

Durante la compilación dependiendo de su nivel de la API se excluye el otro archivo de compilación, para ello es necesario para cambiar el nivel de API en Manifiesto.

+0

Ahora en mi archivo de manifiesto he usado esto así que ahora cambio a lo que – Rahul

+0

Hola vinay tengo publicar mi código que lo he usado en mi proyecto construido utilizando el nivel api 8. ¿Puede mostrarme cómo se puede implementar su código usando en mi proyecto? – Rahul

+0

@RahulBorah, intente aumentar su nivel de API en Manifiesto a 14 y vea si obtiene el error Clase no encontrada ?? – Vinay

Cuestiones relacionadas