2013-03-18 11 views
6

Pytam tabelę zdarzeń w systemie Android, aby uzyskać zdarzenia.Jak zapytać o wydarzenia z kalendarza na Androida w określonym zakresie dat?

String[] projection = new String[] { "calendar_id", "title", "description", 
        "dtstart", "dtend", "eventLocation" }; 

Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/events"), 
        projection, 
        null, 
        null, 
        null); 

Powoduje zwrócenie wszystkich zdarzeń. Ale teraz chcę wydarzeń tylko w określonym czasie, powiedzmy od 4/03/2013 do 7/03/2013. Jak korzystać z selection i selectionArgs[]? Próbowałem tego

String selection = "((dtstart <= ?) AND (dtend >= ?))"; 
String[] selectionArgs = new String[] {startString, endString}; 

Ale nie zwracając niczego. Moje wątpliwości to 1. Czy klauzula będzie działać? Ponieważ, startDate i endDate są najpierw konwertowane na długie (milisekundy), a następnie na String, a następnie są przechowywane w tabeli. W jaki sposób można porównywać łańcuchy znaków dla ich długich wartości. W sqlite nie ma funkcji toNumber(). 2. Jeśli przechodzę pod numer selectionArgs, to czy w jakim formacie powinien być startString i endString?

+0

check: http://stackoverflow.com/questions/26844770/how-to- Uzyskaj dostęp do kalendarzy na telefonie z Androidem –

Odpowiedz

7

startString & endString należy przekazać w milisach. Spróbuj użyć:

Calendar c_start= Calendar.getInstance(); 
c_start.set(2013,2,4,0,0); //Note that months start from 0 (January) 
Calendar c_end= Calendar.getInstance(); 
c_end.set(2013,2,7,0,0); //Note that months start from 0 (January) 

Także myślę, że logika jest odwrotna, zakres dat powinno być tak:

String selection = "((dtstart >= "+c_start.getTimeInMillis()+") AND (dtend <= "+c_end.getTimeInMillis()+"))"; 
+0

Czy mógłbyś rozwinąć tę odpowiedź ... – Deepak

+0

To jest rozwiązanie! –

Powiązane problemy