2012-03-05 12 views
5

में एंड्रॉइड कैलेंडर एकीकरण मैं एंड्रॉइड ओएस 2.2 के लिए कैलेंडर इवेंट जोड़ने के लिए अनियंत्रित एपीआई का उपयोग करता हूं। अब एंड्रॉइड ओएस 4 बाहर है, स्वाभाविक रूप से एपीआई का इस्तेमाल मैं काम नहीं करता! मैंने स्तर 14 में कैलेंडर एपीआई के संबंध में एंड्रॉइड एसडीके को देखा लेकिन मुझे यह पता लगाने में सक्षम नहीं था कि मैंने अपने प्रोजेक्ट में इसका उपयोग कैसे किया है जिसे मैंने एंड्रॉइड ओएस 2.2 का उपयोग करके बनाया है। क्योंकि जब मैं अपनी परियोजना में CalendarContract कक्षा का उपयोग करता हूं तो यह त्रुटि दिखाता है। इसलिए मैं अपने प्रोजेक्ट में इस क्लास का उपयोग करने के लिए सुराग नहीं ढूंढ पा रहा हूं कि मैंने एंड्रॉइड ओएस 2.2 का उपयोग करके बनाया है।एंड्रॉइड ओएस 4

यदि किसी के पास साझा करने के लिए कोई नमूने हैं या नमूने के लिए एक लिंक है, तो कृपया मुझे बताएं।

SDKVersion 8 के लिए कैलेंडर API कक्षा

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

वर्ग - 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); 
} 

}

वर्ग 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); 
    } 

}

धन्यवाद।

+1

पीएल। अपनी त्रुटि या अपवाद – Vinay

+0

कक्षा को कैलेंडरकंट्रैक्ट – Rahul

उत्तर

3

मैं समझता हूँ के रूप में, आप 2 समस्याओं ...

  1. आप 2.2 (एपीआई 8 और ऊपर)
  2. एपीआई 14 से, आप कैलेंडर तक पहुंच बनाने CalendarContract उपयोग करने की आवश्यकता में कैलेंडर का उपयोग करने की जरूरत है

मेरा सुझाव एक अमूर्त वर्ग बन जाएगा और व्यक्तिगत कार्यान्वयन को परिभाषित करेगा।

उदाहरण

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); 
} 
इस के साथ

के लिए, आप संकलन अपने एपीआई स्तर के आधार पर यद्यपि API के अनुसार दो अलग कार्यान्वयन ...

बनाने के संकलन से अन्य फ़ाइल बाहर करते हैं, इस के लिए आप की जरूरत मेनिफेस्ट में एपीआई स्तर बदलने के लिए।

+0

पर अपवाद नहीं मिला है अब मेरी मैनिफेस्ट फ़ाइल में मैंने इसका उपयोग किया है तो अब मैं – Rahul

+0

में बदल गया हूं हाय vinay मैंने अपना कोड पोस्ट किया है मैंने एपीआई स्तर 8 का उपयोग करके निर्मित अपनी परियोजना में उपयोग किया है। क्या आप कृपया मुझे दिखा सकते हैं कि मेरे प्रोजेक्ट में आपके कोड को कैसे लागू किया जा सकता है। – Rahul

+0

@RahulBorah, अपने एपीआई स्तर को मैनिफेस्ट में 14 तक बढ़ाने का प्रयास करें और देखें कि क्या आपको कक्षा में त्रुटि नहीं मिली है ?? – Vinay

संबंधित मुद्दे