2012-03-05 6 views
5

Tôi sử dụng API không có giấy tờ để thêm sự kiện lịch cho Android OS 2.2. Bây giờ hệ điều hành Android 4 là ra, tự nhiên các API của tôi sử dụng không hoạt động! Tôi đã xem xét SDK Android về lịch api ở cấp 14 nhưng tôi không thể tìm thấy manh mối về cách sử dụng điều này trong dự án của mình mà tôi đã tạo bằng cách sử dụng Android OS 2.2. Bởi vì khi tôi sử dụng CalendarContract lớp trong dự án của tôi, nó cho thấy lỗi. Vì vậy, tôi không thể tìm ra manh mối cần làm và cách sử dụng lớp này trong dự án của tôi mà tôi đã tạo bằng cách sử dụng hệ điều hành Android 2.2.Tích hợp Lịch Android trong Android OS 4

Nếu bất kỳ ai có bất kỳ mẫu nào để chia sẻ hoặc liên kết đến mẫu, vui lòng cho tôi biết.

Lịch Api Lớp

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) ; 
} 

lớp cho 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); 
} 

}

lớp cho 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); 
    } 

}

Cảm ơn bạn.

+1

pl. đăng lỗi của bạn hoặc ngoại lệ – Vinay

+0

lớp không tìm thấy ngoại lệ trên CalendarContract – Rahul

Trả lời

3

Như tôi hiểu, bạn có 2 vấn đề ...

  1. Bạn cần phải truy cập Calender trong 2.2 (API 8 trở lên)
  2. Từ API 14, bạn cần phải sử dụng CalendarContract để truy cập Lịch

Đề xuất của tôi sẽ là Tạo lớp trừu tượng và xác định triển khai cá nhân.

Ví dụ

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); 
} 

Với điều này, bạn tạo hai thực hiện khác nhau theo apis ...

Trong khi biên dịch tùy thuộc vào mức độ API của bạn loại trừ các tập tin khác từ biên soạn, cho điều này bạn cần để thay đổi cấp API trong Tệp kê khai.

+0

Bây giờ trong tệp kê khai của tôi, tôi đã sử dụng để bây giờ tôi thay đổi thành những gì – Rahul

+0

Hi vinay tôi có đăng mã của tôi tôi đã sử dụng trong dự án của tôi được xây dựng bằng cách sử dụng cấp api 8. Bạn có thể chỉ cho tôi cách mã của bạn có thể được triển khai bằng cách sử dụng trong dự án của tôi không. – Rahul

+0

@RahulBorah, hãy thử tăng cấp API của bạn trong Tệp kê khai lên 14 và xem bạn có gặp lỗi không tìm thấy Lớp không ?? – Vinay