1

目覚ましアプリのようなものをとりあえず自分用に書いてみたのですが、完成したら欲しい人がいれば無料で公開するかもしれません。いずれにせよ、私は窮地に立たされました。カレンダーから必要なのは、ユーザーのカレンダーの次のイベントだけなので、タイトル、時間、時間まで、場所を表示できます。

ここに私がこれまでに持っているものがあります:

    //get cursor to first row of table of events
        mCursor = getContentResolver().query(
        CalendarContract.Events.CONTENT_URI, COLS, null, null, null);
        mCursor.moveToFirst();

        //variables; title, startdate in miliseconds, etc
        String nextAppointmentTitle = "N/A";
        Long start = 0L;            //tf(start) for appointmentTime
        String timeUntilNextAppointment = "N/A";
        String nextAppointmentLocation = "N/A";


        Format df = DateFormat.getDateFormat(this);
        Format tf = DateFormat.getTimeFormat(this);
        try {
        nextAppointmentTitle = mCursor.getString(0);
        start = mCursor.getLong(1);
        } catch (Exception e) {
        //ignore for the time being
        }


        //create a date object for the time of the event
        GregorianCalendar appointmentTime = (GregorianCalendar) GregorianCalendar.getInstance();
        appointmentTime.setTimeInMillis(start);
        //create date object for current time       
        GregorianCalendar now = (GregorianCalendar) GregorianCalendar.getInstance();

        //get the time from current time until start of event
        long millisUntilNextMeeting = (long) appointmentTime.getTimeInMillis() - (long) now.getTimeInMillis();
        GregorianCalendar timeUntilNextMeeting = (GregorianCalendar) GregorianCalendar.getInstance();
        timeUntilNextMeeting.clear();
        timeUntilNextMeeting.setTime(new Date(millisUntilNextMeeting));

        millisUntilNextMeeting= (millisUntilNextMeeting/1000) /60;

        if (timeUntilNextMeeting.get(GregorianCalendar.HOUR_OF_DAY) > 0) {
            int hours = timeUntilNextMeeting.get(GregorianCalendar.HOUR_OF_DAY) + 6;
            timeUntilNextAppointment = "" + hours + " hours";
        } else {
            timeUntilNextAppointment = "" + timeUntilNextMeeting.get(GregorianCalendar.MINUTE) + " minutes";
        } 
// ... do things with values

私の次の予定を示すのではなく、どうやら 2 月に行われるように見える Alberta Family Day を示しています。カレンダーを調べてみたところ、実際に何かを入れたカレンダーではなく、Google が私の携帯電話に追加してくれた「カナダの祝日」カレンダーが恣意的に選択されているようです。方法がわかりません。ユーザーに毎回選択させることなく、正しいカレンダーを選択できます。

必要なカレンダーから必要な値を取得する方法を知っている人はいますか? 手を貸していただければ幸いです。

PS このアプリが 4.0 より前のデバイスでは動作しないことはわかっていますが、恐ろしい Google API ドキュメントを解読しようとしてさらに 4 時間も費やす気にはなりません。

4

1 に答える 1

0

まず、CalendarContract.Calendars の定数を使用して、必要なカレンダーを見つけます。NAME または CALENDAR_DISPLAY_NAME に対してクエリを実行します。返された行から、_ID 値を取得します。この値を使用して、CalendarContract.Events.CALENDAR_ID を照会します。これにより、CalendarContract.Events.CALENDAR_ID で識別されるカレンダーのすべてのイベントが得られます。

あなたがしていたことは、すべてのカレンダーのすべてのイベントを取得することです

于 2012-10-27T17:19:07.663 に答える