2013-03-18 7 views
6

私はイベントを取得するためにアンドロイドのイベントテーブルを照会しています。特定の期間のアンドロイドカレンダーイベントを照会するにはどうすればよいですか?

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); 

これはすべてのイベントを返します。しかし今、私は特定の期間内にのみ、2013年4月3日から2013年7月3日までのイベントを望みます。 selectionselectionArgs[]を使用するにはどうすればよいですか? 私はこの

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

しかし、その戻っていない何かを試してみました。私の疑問は です。1. where句は動作しますか?なぜなら、startDateとendDateは最初にlong(ミリ秒)に変換され、Stringに変換されてテーブルに格納されるからです。文字列の長さを比較する方法sqliteにはtoNumber()関数はありません。 2. selectionArgsを渡す場合は、startStringendStringの形式にする必要がありますか?

+0

チェック:http://stackoverflow.com/questions/26844770/how-to-カレンダーにアクセスして、アンドロイド携帯電話 –

答えて

7

& endStringをミリ秒で渡す必要があります。使用してみてください:

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) 

また、私はあなたのロジックが反転していると思う、日付範囲は次のようにする必要があります:

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

この答えを詳しく説明してください... – Deepak

+0

これは解決策です! –

関連する問題