2014-03-29 43 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> 
相关问题