2013-02-04 33 views
8

Tôi biết điều này đã được hỏi trước đây trong diễn đàn này, nhưng tôi đã thử mọi thứ được viết ở đây và vẫn không có gì phù hợp với tôi. Những gì tôi muốn làm là chèn một sự kiện vào lịch. Vì có một số ứng dụng lịch trên thiết bị của tôi, tôi muốn cho phép người dùng chọn ứng dụng lịch nào nên chứa sự kiện mới, tương tự như những gì xảy ra khi người dùng cố gắng xem vị trí bằng ứng dụng bản đồ (người dùng có thể chọn kích hoạt bản đồ google, internet, ...). Vì lý do này, tôi phải sử dụng Intent.chèn sự kiện vào lịch sử dụng mục đích

BTW, tôi biết rằng việc chèn sự kiện mới vào lịch bằng Mục đích chỉ được phép trên các thiết bị có SDK phiên bản 14 trở lên. Thiết bị của tôi có cấp API 15, vì vậy nó hỗ trợ API lịch.

Dưới đây là mã của tôi:

Intent calendarIntent = new Intent(Intent.ACTION_INSERT); 
calendarIntent.setData(Events.CONTENT_URI); 
calendarIntent.putExtra(Events.TITLE, "title"); 
calendarIntent.putExtra(Events.EVENT_LOCATION, "address"); 
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.DAY_OF_MONTH, 1); 
cal.set(Calendar.MONTH, 0); 
cal.set(Calendar.YEAR, 2013); 
cal.set(Calendar.HOUR_OF_DAY, 20); 
cal.set(Calendar.MINUTE, 0); 
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, cal.getTime().getTime()); 
cal.set(Calendar.HOUR_OF_DAY, 20); 
cal.set(Calendar.MINUTE, 30); 
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, cal.getTime().getTime()); 
ctx.startActivity(calendarIntent); 

tôi nhận được ngoại lệ này:

02-04 17:55:23.957: E/AndroidRuntime(3781): FATAL EXCEPTION: main 
02-04 17:55:23.957: E/AndroidRuntime(3781): java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.applicat.meuchedet/com.applicat.meuchedet.MainScreenActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.INSERT dat=content://com.android.calendar/events (has extras) } 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.ActivityThread.access$600(ActivityThread.java:127) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.os.Looper.loop(Looper.java:137) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.ActivityThread.main(ActivityThread.java:4507) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at dalvik.system.NativeStart.main(Native Method) 
02-04 17:55:23.957: E/AndroidRuntime(3781): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.INSERT dat=content://com.android.calendar/events (has extras) } 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1535) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1387) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.Activity.startActivityForResult(Activity.java:3190) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at com.applicat.meuchedet.Screen.startActivity(Screen.java:433) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at com.applicat.meuchedet.CalendarAppointmentScheduler.writeAppointmentToCalendar(CalendarAppointmentScheduler.java:137) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at com.applicat.meuchedet.MainScreenActivity.onCreate(MainScreenActivity.java:258) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.Activity.performCreate(Activity.java:4465) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932) 
02-04 17:55:23.957: E/AndroidRuntime(3781):  ... 11 more 

Tôi đang làm gì sai?

Thanx

+0

Bạn đã cài đặt ứng dụng lịch? Lỗi này chỉ ra rằng không có gì tồn tại để xử lý ý định. – BoredAndroidDeveloper

Trả lời

11

Bạn gặp ActivityNotFoundException vì mọi hoạt động không thể xử lý hành động của bạn.

Thay vì sử dụng Intent.ACTION_INSERT cố gắng làm như thế này:

Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setType("vnd.android.cursor.item/event"); 
intent.putExtra(Events.TITLE, strTitle); 
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, 
        startDateMillis); 
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, 
        endDateMillis); 
intent.putExtra(Events.ALL_DAY, false);// periodicity 
      intent.putExtra(Events.DESCRIPTION,strDescription)); 

Bạn có thể kiểm tra trong tài liệu phát triển cho các thuộc tính khác.

+0

Tôi nghĩ Yvan đang chỉ cho bạn đúng hướng sau khi nhìn thấy điều này: http://stackoverflow.com/questions/9926830/error-inserting-event-into-calendar-with-intent Rõ ràng một số điện thoại không tôn trọng ACTION_INSERT và thay vào đó yêu cầu ACTION_EDIT. Tôi không nghĩ rằng bạn cần phải sử dụng dòng setType ông có nhưng tôi có thể sai – BoredAndroidDeveloper

+0

Tôi luôn luôn sử dụng phương pháp của Yvan và nó hoạt động. – psykhi

+0

Cảm ơn! Nó ổn với tôi. Bạn có biết tại sao cần sử dụng dòng mã setType? – shai

0

chèn một sự kiện như thế này

Calendar beginTime = Calendar.getInstance(); 
beginTime.set(2012, 0, 19, 7, 30); 
Calendar endTime = Calendar.getInstance(); 
endTime.set(2012, 0, 19, 8, 30); 
Intent intent = new Intent(Intent.ACTION_INSERT) 
    .setData(Events.CONTENT_URI) 
    .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, 
beginTime.getTimeInMillis()) 
    .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, 
endTime.getTimeInMillis()) 
    .putExtra(Events.TITLE, "Yoga") 
    .putExtra(Events.DESCRIPTION, "Group class") 
    .putExtra(Events.EVENT_LOCATION, "The gym") 
    .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY) 
    .putExtra(Intent.EXTRA_EMAIL, "[email protected],[email protected]"); 
startActivity(intent); 
Các vấn đề liên quan