日历活动无法在Android 3.2平板电脑中运行

时间:2011-10-11 07:23:26

标签: android calendar

我正在尝试使用Android平板电脑3.2中的以下代码添加日历事件

                                int[] calIds = null;
                                Cursor cursor = getContentResolver()
                                        .query(
                                                Uri
                                                        .parse("content://com.android.calendar/calendars"),
                                                new String[] { "_id",
                                                        "displayName" },
                                                "selected=1", null, null);
                                if (cursor != null && cursor.moveToFirst()) {
                                    String[] calNames = new String[cursor
                                            .getCount()];
                                    calIds = new int[cursor.getCount()];
                                    for (int i = 0; i < calNames.length; i++) {
                                        // retrieve the calendar names and
                                        // ids
                                        // at this stage you can print out
                                        // the display names to get an idea
                                        // of what calendars the user has
                                        calIds[i] = cursor.getInt(0);
                                        calNames[i] = cursor.getString(1);
                                        cursor.moveToNext();
                                    }
                                    cursor.close();
                                    if (calIds.length > 0) {
                                        // we're safe here to do any further
                                        // work
                                    }
                                }

                                // grab calendar id from above
                                int cal_id = calIds[1];

                                // set the content value
                                ContentValues cv = new ContentValues();

                                // make sure you add it to the right
                                // calendar
                                cv.put("calendar_id", cal_id);

                                // set the title of the event
                                cv.put("title", Name.getText().toString());

                                // set the description of the event
                                cv.put("description", Address.getText()
                                        .toString()
                                        + " ph:"
                                        + Phone.getText().toString());

                                // set the event's physical location
                                // cv.put("eventLocation", );

                                // set the start and end time
                                // note: you're going to need to convert the
                                // desired date into milliseconds

                                Calendar d = Calendar.getInstance();
                                d.set(2011, 10, 10, 3, 0, 0);
                                Calendar end = Calendar.getInstance();
                                end.set(2011, 10, 10, 9, 0, 0);

                                long startTime = d.getTimeInMillis();
                                long endTime = end.getTimeInMillis();
                                endTime = endTime * 1000;

                                startTime = startTime * 1000;
                                System.out.println("HOW TO SOL:VCE THIS");

                                System.out.println(startTime);
                                System.out.println(endTime);

                                cv.put("dtstart", startTime);

                                cv.put("dtend", endTime);



                                cv.put("rrule",
                                        "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"); // let
                                                                            // the
                                                                            // calendar
                                                                            // know
                                                                            // whether
                                                                            // this
                                                                            // event
                                                                            // goes
                                                                            // on
                                                                            // all
                                                                            // day
                                                                            // or
                                                                            // not
                                // true = 1, false = 0

                                // let the calendar know whether an alarm
                                // should go off for this event

                                // once desired fields are set, insert it
                                // into the table
                                getContentResolver()
                                        .insert(
                                                Uri
                                                        .parse("content://com.android.calendar/events"),
                                                cv);

但我无法插入活动。

在日志中我得到以下

10-11 12:51:47.250: INFO/CalendarProvider2(24267): Sending notification intent: Intent { act=android.intent.action.PROVIDER_CHANGED dat=content://com.android.calendar }
10-11 12:51:47.250: WARN/ContentResolver(24267): Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)

我应该如何解决这个问题呢? 提前谢谢..

1 个答案:

答案 0 :(得分:1)

这里我可以将事件插入日历。

    final ContentResolver cr = getContentResolver();
    Cursor cursor ;


    //Retrieving calendar sync data 


    if (Integer.parseInt(Build.VERSION.SDK) == 8 )
        cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), new String[]{ "_id", "displayname" }, null, null, null);
    else
        cursor = cr.query(Uri.parse("content://calendar/calendars"), new String[]{ "_id", "displayname" }, null, null, null);
    if(cursor.moveToFirst()) 
    {
        final String[] calNames = new String[cursor.getCount()];
        final int[] calIds = new int[cursor.getCount()];
        for (int i = 0; i < calNames.length; i++) 
        {
            calIds[i] = cursor.getInt(0);
            calNames[i] = cursor.getString(1);
            System.out.println("Title: " +calIds[i] + " name " + calNames[i]);
            cursor.moveToNext();
        }
        System.out.println("currenttimeinmillis"+System.currentTimeMillis());



        AlertDialog.Builder builder = new AlertDialog.Builder(calendarsync.this);
        builder.setSingleChoiceItems(calNames, -1, new DialogInterface.OnClickListener() 
        {
            @Override
            public void onClick(DialogInterface dialog, int which) 
            {

                **
  

//在日历中插入/同步事件

**

                ContentValues cv = new ContentValues();
                cv.put("calendar_id", calIds[which]);
                cv.put("title", "Naven");
                // set the description of the event
                cv.put("description", "Birthday");
                // set the event's physical location
                // cv.put("eventLocation", );

                Calendar d = Calendar.getInstance();
                d.set(2012, 0, 10, 3, 0, 0);
                Calendar end = Calendar.getInstance();
                end.set(2012, 0, 10, 4, 0, 0);

                long startTime = d.getTimeInMillis();
                long endTime = end.getTimeInMillis();
               // endTime = endTime * 1000;

               // startTime = startTime * 1000;
                System.out.println("HOW TO SOL:VCE THIS");

                System.out.println(startTime);
                System.out.println(endTime);

                cv.put("dtstart", startTime);

                cv.put("dtend", endTime);
                cv.put("rrule","FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"); 
                // let the calendar know whether this
                // event goes on all day or not
                // true = 1, false = 0

                cv.put("hasAlarm", 1);

                Uri newEvent ;
                if (Integer.parseInt(Build.VERSION.SDK) == 8 )
                    newEvent = cr.insert(Uri.parse("content://com.android.calendar/events"), cv);
                else
                    newEvent = cr.insert(Uri.parse("content://com.android.calendar/events"), cv);

                if (newEvent != null) 
                {
                    long id = Long.parseLong( newEvent.getLastPathSegment() );
                    ContentValues values = new ContentValues();
                    values.put( "event_id", id );
                    values.put( "method", 1 );
                    values.put( "minutes", 15 ); // 15 minuti
                    if (Integer.parseInt(Build.VERSION.SDK) == 8 )
                        cr.insert( Uri.parse( "content://com.android.calendar/reminders" ), values );
                    else
                        cr.insert( Uri.parse( "content://calendar/reminders" ), values );

                }
                dialog.cancel();
            }

        });

        builder.create().show();

    }    
    cursor.close();