2014-03-29 42 views
0

不幸的是,我無法找到任何有關這方面的幫助。Android:如何從手機獲取所有可用日曆

其實我想從移動例如谷歌日曆,雅虎日曆獲取所有可用日曆(可能是日曆偏好)名單。

爲了更好的說明,我從捕獲應用Smooth Calendar這是在下面的圖片從窗口小部件配置按鈕,點擊後,一些圖像。

enter image description here==> enter image description here

這裏的日曆偏好顯示的手機,並選擇它顯示了所有的日曆來選擇想要的用戶的日曆選項後可用的所有日曆。

有人可以幫助我在這裏,並分享一些知識,如何做到這一點。

感謝

回答

0

幸好我發現從開發者網站,並能得到所有可用的日曆和動態Checkpreferences告訴他們一些幫助。

希望我的代碼將在未來有所幫助。

CalendarPreference.java

public class CalendarPreference extends PreferenceActivity{ 
private static final String CALENDAR_ID = "calendarId"; 
private static final String[] PROJECTION = new String[] { Calendars._ID, 
     Calendars.CALENDAR_DISPLAY_NAME, Calendars.CALENDAR_COLOR }; 
private Set<String> initialActiveCalendars; 

CheckBoxPreference mCheckBoxPreference; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.calendaraccounts); 
    SharedPreferences prefs = getPreferenceManager().getSharedPreferences(); 
    initialActiveCalendars = prefs.getStringSet("PREF_ACTIVE_CALENDARS", null); 
    populatePreferenceScreen(initialActiveCalendars); 


} 

private void populatePreferenceScreen(Set<String> activeCalendars) { 
    Cursor cursor = createLoadedCursor(); 
    if (cursor == null) { 
     return; 
    } 
    for (int i = 0; i < cursor.getCount(); i++) { 
     cursor.moveToPosition(i); 
     CheckBoxPreference checkboxPref = new CheckBoxPreference(this); 
     checkboxPref.setTitle(cursor.getString(1)); 
     checkboxPref.setIcon(createDrawable(cursor.getInt(2))); 
     int calendarId = cursor.getInt(0); 
     checkboxPref.getExtras().putInt(CALENDAR_ID, calendarId); 
     checkboxPref.setChecked(activeCalendars == null 
       || activeCalendars.contains(String.valueOf(calendarId))); 
     getPreferenceScreen().addPreference(checkboxPref); 
    } 
} 

    @Override 
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 
     return true; 
    } 


    private Cursor createLoadedCursor() { 
    Uri.Builder builder = Calendars.CONTENT_URI.buildUpon(); 
    ContentResolver contentResolver = getContentResolver(); 
    return contentResolver.query(builder.build(), PROJECTION, null, null, null); 
    } 

    @Override 
    public void onPause() { 
     super.onPause();   
     HashSet<String> selectedCalendars = getSelectedCalenders(); 
     if (!selectedCalendars.equals(initialActiveCalendars)) { 
      persistSelectedCalendars(selectedCalendars); 
      Log.v("Selected Calendars", selectedCalendars.toString()); 
      NewWidget.updateAllWidgets(this); 
     } 
    } 

    private void persistSelectedCalendars(HashSet<String> prefValues) { 
     SharedPreferences prefs = getPreferenceManager().getSharedPreferences(); 
     Editor editor = prefs.edit(); 
     editor.putStringSet("PREF_ACTIVE_CALENDARS", prefValues); 
     editor.commit(); 
    } 

    private HashSet<String> getSelectedCalenders() { 
     PreferenceScreen preferenceScreen = getPreferenceScreen(); 
     int prefCount = preferenceScreen.getPreferenceCount(); 
     HashSet<String> prefValues = new HashSet<String>(); 
     for (int i = 0; i < prefCount; i++) { 
      Preference pref = preferenceScreen.getPreference(i); 
      if (pref instanceof CheckBoxPreference) { 
       CheckBoxPreference checkPref = (CheckBoxPreference) pref; 
       if (checkPref.isChecked()) { 
        prefValues.add(String.valueOf(checkPref.getExtras().getInt(CALENDAR_ID))); 
       } 
      } 
     } 
     return prefValues; 
    } 

    private Drawable createDrawable(int color) { 
     Drawable drawable = getResources().getDrawable(R.drawable.prefs_calendar_entry); 
     drawable.setColorFilter(new LightingColorFilter(0x0, color)); 
     return drawable; 
    } 


} 

這裏RES/XML/calendaraccounts.xml

<PreferenceScreen> 

</PreferenceScreen> 
相關問題