2012-01-16 22 views
10

एंड्रॉइड पर कैलेंडर ऐप कई अलग-अलग कैलेंडर मर्ज कर सकता है: स्थानीय फोन कैलेंडर, Google कैलेंडर, आदिमैं एंड्रॉइड में नया फोन कैलेंडर कैसे जोड़ सकता हूं?

मैं एंड्रॉइड फोन में ऐसा नया कैलेंडर कैसे जोड़ सकता हूं? मैं Google जैसे किसी भी ऑनलाइन संसाधन तक पहुंच के बिना उस कैलेंडर में घटनाओं को गतिशील रूप से उत्पन्न करना चाहता हूं।

संपादित करें: मैं एंड्रॉइड 1.5 और 2.3.4 के साथ फोन का समर्थन करना चाहता हूं। मुझे शायद किसी नए फोन के लिए 4.0 पर अपडेट मिलेगा, लेकिन कौन जानता है कि यह कब होगा ...

+0

आईसीएस पर गूगल कैलेंडर पर यह बनाने के लिए है: आप com.android.calendar अधिकार के लिए एक सिंक अनुकूलक को लागू करने और CalendarContract में एक पंक्ति बनाने की आवश्यकता होगी कैलेंडर जहां आपने ACCOUNT_NAME और ACCOUNT_TYPE को अपने नाम और मानों पर सेट किया है। 2 के लिए कार्यक्षमता।3 और इससे पहले अप्रकाशित है, लेकिन काम करता है ... * के बारे में * वही - लेकिन इससे आगे की अंतःक्रियाशीलता के लिए आगे बढ़ना गन्दा हो रहा है और परीक्षण करने में समय लगता है। – Jens

उत्तर

3

मुझे this link मिला है जो 4.0 से पहले फोन पर कैलेंडर सामग्री प्रदाता तक पहुंचने पर चर्चा करता है।

मूल रूप से आप सिर्फ प्रदाता का यूआरआई तार पता करने के लिए है:

  • content://calendar एंड्रॉयड < 2.2
  • content://com.android.calendar Android के लिए के लिए 2.2+।
3

मैंने कैलेंडर डालने के लिए निम्नलिखित गतिविधि (साथ ही कुछ संसाधन इत्यादि) लिखी हैं (सिंक्रनाइज़ नहीं) एपीआई स्तर 15 एमुलेटर पर (क्योंकि कैलेंडर ऐप में मेरे फोन (एपीआई 8) पर ऐप के विपरीत कैलेंडर जोड़ने की कोई सुविधा नहीं है, या मुझे यह नहीं मिला ...)। लेआउट को सम्मिलित करने के बाद प्रतिक्रिया देने के लिए कैलेंडर के नाम और प्रदर्शन नाम, एक ऐड-बटन और स्थिति टेक्स्ट दृश्य के लिए फ़ील्ड टेक्स्ट करना पड़ता है। सुनिश्चित करें कि आप अनुमतियाँ मेनिफ़ेस्ट में सेट किया हुआ है:

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

यहाँ कोड है:

public class CalUtilActivity extends Activity { 
private EditText name; 
private EditText display; 
private TextView status; 

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.main); 

    this.name = (EditText) this.findViewById(R.id.name); 
    this.display = (EditText) this.findViewById(R.id.displayname); 
    this.status = (TextView) this.findViewById(R.id.status); 

    final Button b = (Button) this.findViewById(R.id.add); 
    b.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(final View v) { 
      CalUtilActivity.this.addCalendar(); 
     } 
    }); 
} 

private void addCalendar() { 
    final String cname = this.name.getText().toString(); 
    final String dname = this.display.getText().toString(); 
    if(cname.length() == 0 || dname.length() == 0) { 
     this.status.setText(this.getResources().getString(R.string.errorNames)); 
     return; 
    } 
    this.status.setText(""); 

    final Uri calUri = CalendarContract.Calendars.CONTENT_URI; 
    final ContentValues v = new ContentValues(); 
    v.put(CalendarContract.Calendars.NAME, cname); 
    v.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, dname); 
    v.put(CalendarContract.Calendars.VISIBLE, 1); 

    final Uri result = this.getContentResolver().insert(calUri, v); 

    this.status.setText(result.toString()); 
} 

}

एपीआई 13 और इससे पहले कि आप सामग्री प्रदाता का उपयोग नहीं कर सकते हैं, तो आप करने के लिए है सीधे डेटाबेस तक पहुंचें। एक कैलेंडर जोड़ने के टेबल कैलेंडर है, जो निम्नलिखित बनाने के बयान

CREATE TABLE Calendars (_id INTEGER PRIMARY KEY,_sync_account TEXT,_sync_account_type TEXT,_sync_id TEXT,_sync_version TEXT,_sync_time TEXT,_sync_local_id INTEGER,_sync_dirty INTEGER,_sync_mark INTEGER,url TEXT,name TEXT,displayName TEXT,hidden INTEGER NOT NULL DEFAULT 0,color INTEGER,access_level INTEGER,selected INTEGER NOT NULL DEFAULT 1,sync_events INTEGER NOT NULL DEFAULT 0,location TEXT,timezone TEXT,ownerAccount TEXT, organizerCanRespond INTEGER NOT NULL DEFAULT 1); 

_ id, नाम की स्थापना के अनुसार परिभाषित किया गया है के लिए एक पंक्ति जोड़ना होगा, और DISPLAYNAME अगर आप कैलेंडर को सिंक्रनाइज़ करने की जरूरत नहीं है काम करना चाहिए। हालांकि, आप एमुलेटर पर परीक्षण नहीं कर सकते, क्योंकि कैलेंडर ऐप और इसका डेटाबेस गुम है। और डिवाइस विक्रेताओं ने सैद्धांतिक रूप से डेटाबेस को संशोधित किया हो सकता है, लेकिन चूंकि वहां बहुत से कैलेंडर एप्लिकेशन उपलब्ध हैं, इसलिए व्यक्तिगत रूप से यह नहीं लगता कि उन्होंने डेटाबेस स्कीमा को संशोधित किया है।

13

मैं आईसीएस से नए एपीआई का उपयोग करके कैलेंडर जोड़ने में कामयाब रहा। स्टीफन के जवाब में मदद मिली, लेकिन सभी कॉलमों को लिखने में सक्षम होने के लिए, आपको एक सिंक एडाप्टर के रूप में ऑपरेशन करना होगा। आप कैलेंडरकंट्रैक्ट.एसीसीसीटीटीआई PLOLOCAL का उपयोग कर एक सामान्य ऐप से ऐसा कर सकते हैं। निम्नलिखित कोड आईसीएस पर काम करना चाहिए। शायद कुछ कॉलम मान सही नहीं हैं। CalendarContract.Calendars के प्रलेखन देखें। दुर्भाग्य से मैं पुराने एंड्रॉइड संस्करणों के लिए आपकी मदद नहीं कर सकता, लेकिन कैलेंडर कंट्रैक्ट केवल कुछ स्थिर स्ट्रिंग मानों के लिए उपयोग किया जाता है। शायद ये पुराने संस्करणों पर भी काम करते हैं।

Uri calUri = CalendarContract.Calendars.CONTENT_URI; 
ContentValues cv = new ContentValues(); 
cv.put(CalendarContract.Calendars.ACCOUNT_NAME, yourAccountName); 
cv.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL); 
cv.put(CalendarContract.Calendars.NAME, yourInternalName); 
cv.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, yourDisplayName); 
cv.put(CalendarContract.Calendars.CALENDAR_COLOR, yourColor); 
cv.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER); 
cv.put(CalendarContract.Calendars.OWNER_ACCOUNT, true); 
cv.put(CalendarContract.Calendars.VISIBLE, 1); 
cv.put(CalendarContract.Calendars.SYNC_EVENTS, 1); 

calUri = calUri.buildUpon() 
    .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true") 
    .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, ACCOUNT_NAME) 
    .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL) 
    .build(); 
Uri result = this.getContentResolver().insert(calUri, cv); 
+0

+1 यह मुझे बहुत मदद करता है, बहुत बहुत धन्यवाद। – Andrain

-5

सबसे आसान आपके कंप्यूटर और सिंक यह

+8

आपने मुझे हंसते हुए :) ... कम से कम, मुझे उम्मीद है कि यह एक मजाक के रूप में था। – Glenn85

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

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