2014-02-21 51 views
0

我正在預約日程安排程序。我在其中提取姓名,約會日期和約會時間,然後當用戶點擊確定按鈕時,我希望事件被添加到默認的Google日曆中。但我無法做到這一點,任何人都可以告訴我該怎麼做。 在此先感謝: 做什麼ü建議普拉這就是LOG貓說將事件添加到默認日曆中

02-21 07:40:33.525: D/AndroidRuntime(1510): Shutting down VM 
02-21 07:40:33.525: W/dalvikvm(1510): threadid=1: thread exiting with uncaught exception (group=0xb4a84ba8) 
02-21 07:40:33.605: E/AndroidRuntime(1510): FATAL EXCEPTION: main 
02-21 07:40:33.605: E/AndroidRuntime(1510): Process: com.example.scheduler, PID: 1510 
02-21 07:40:33.605: E/AndroidRuntime(1510): java.lang.IllegalArgumentException: Unknown URL nullevents 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at android.content.ContentResolver.insert(ContentResolver.java:1186) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at com.example.scheduler.Alert$2.onClick(Alert.java:85) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at android.view.View.performClick(View.java:4438) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at android.view.View$PerformClick.run(View.java:18422) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at android.os.Handler.handleCallback(Handler.java:733) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at android.os.Handler.dispatchMessage(Handler.java:95) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at android.os.Looper.loop(Looper.java:136) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at java.lang.reflect.Method.invoke(Method.java:515) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
02-21 07:40:33.605: E/AndroidRuntime(1510):  at dalvik.system.NativeStart.main(Native Method) 
02-21 07:40:42.285: I/Choreographer(1541): Skipped 32 frames! The application may be doing too much work on its main thread. 
02-21 07:40:42.705: I/Choreographer(1541): Skipped 114 frames! The application may be doing too much work on its main thread. 
02-21 07:40:42.905: D/gralloc_goldfish(1541): Emulator without GPU emulation detected. 

回答

0

簡單的方法來做到這一點,如下所示: -

Calendar cal = Calendar.getInstance();    
Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setType("vnd.android.cursor.item/event"); 
intent.putExtra("beginTime", cal.getTimeInMillis()); 
intent.putExtra("allDay", false); 
intent.putExtra("rrule", "FREQ=DAILY"); 
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000); 
intent.putExtra("title", "A Test Event from android app"); 
startActivity(intent); 

,這裏是另一種方式是

使用此方法獲取對日曆的參考 (強烈建議不要使用此方法,因爲它可能會破壞較新的Android版本):

private String getCalendarUriBase(Activity act) { 

    String calendarUriBase = null; 
    Uri calendars = Uri.parse("content://calendar/calendars"); 
    Cursor managedCursor = null; 
    try { 
     managedCursor = act.managedQuery(calendars, null, null, null, null); 
    } catch (Exception e) { 
    } 
    if (managedCursor != null) { 
     calendarUriBase = "content://calendar/"; 
    } else { 
     calendars = Uri.parse("content://com.android.calendar/calendars"); 
     try { 
      managedCursor = act.managedQuery(calendars, null, null, null, null); 
     } catch (Exception e) { 
     } 
     if (managedCursor != null) { 
      calendarUriBase = "content://com.android.calendar/"; 
     } 
    } 
    return calendarUriBase; 
} 

並添加事件和提醒是這樣的:

// get calendar 
Calendar cal = Calendar.getInstance();  
Uri EVENTS_URI = Uri.parse(getCalendarUriBase(this) + "events"); 
ContentResolver cr = getContentResolver(); 

// event insert 
ContentValues values = new ContentValues(); 
values.put("calendar_id", 1); 
values.put("title", "Reminder Title"); 
values.put("allDay", 0); 
values.put("dtstart", cal.getTimeInMillis() + 11*60*1000); // event starts at 11 minutes from now 
values.put("dtend", cal.getTimeInMillis()+60*60*1000); // ends 60 minutes from now 
values.put("description", "Reminder description"); 
values.put("visibility", 0); 
values.put("hasAlarm", 1); 
Uri event = cr.insert(EVENTS_URI, values); 

// reminder insert 
Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(this) + "reminders"); 
values = new ContentValues(); 
values.put("event_id", Long.parseLong(event.getLastPathSegment())); 
values.put("method", 1); 
values.put("minutes", 10); 
cr.insert(REMINDERS_URI, values); 

您還需要將這些權限添加到您的清單此方法:

<uses-permission android:name="android.permission.READ_CALENDAR" /> 
<uses-permission android:name="android.permission.WRITE_CALENDAR" /> 
+0

我有太多想這更早這次我也在嘗試這個東西。但每次點擊按鈕時,它都會顯示「在添加事件之前,您必須添加至少一個日曆帳戶」,然後我添加了該帳戶,但它又說了同樣的事情,我試圖在模擬器上運行它。你認爲它會在Android手機上運行良好,並且在仿真器上效果不佳。請給我一些建議。謝謝 –

+0

請檢查我更新我的答案 –

+0

DID你現在建議它是強制關閉,當我點擊按鈕這是什麼LOG CAT說: –

相關問題