2014-03-29 9 views
0

불행히도이 문제에 관해 어떤 도움도 찾을 수 없습니다.Android : 모바일에서 사용 가능한 모든 캘린더를받는 방법

사실 Google 캘린더, 야후 캘린더와 같은 모바일에서 사용 가능한 모든 캘린더 (캘린더 환경 설정 일 수 있음) 목록을 가져 오려고합니다.

더 나은 설명을 위해 위젯에서 구성 버튼 클릭 후 아래 이미지에있는 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; 
    } 


} 

그리고 여기에 고해상도/XML/calendaraccounts.xml

<PreferenceScreen> 

</PreferenceScreen>