0

奇妙な問題があります。これを解決する方法がわかりません。私は多くのことをテストしましたが、何が問題なのかわかりません。

わかりました。Googleカレンダーデバイスにイベントを挿入する簡単なプログラムを作成しました。これにより、Googleカレンダーに正常に挿入されます。

グーグルカレンダーから編集しようとしたり、編集メニューをクリックしようとすると、グーグルカレンダーがクラッシュします。多くのデバイスでテストを行っていますが、問題はすべてのデバイスカレンダーで同じでした。

これが私のコードです

ContentResolver cr = getContentResolver();
        ContentValues values = new ContentValues();
        Uri EVENTS_URI = null;

        EVENTS_URI = Uri.parse("content://com.android.calendar/events");

        long time = System.currentTimeMillis();

        values.put("calendar_id", 1);
        values.put("title", "event.eventName");
        values.put("allDay", 0);
        values.put("dtstart", time); 
        values.put("dtend", time + 1000 * 60 * 60 * 2);
        values.put("description", "description");
        values.put("visibility", 0);
        values.put("transparency", 0);
        values.put("hasAttendeeData", 0);
        values.put("hasAlarm", 1);
        values.put("eventLocation", "location");
        cr.insert(EVENTS_URI, values);

挿入されたイベントでのみこれが発生する理由を検出または推論できません

4

2 に答える 2

0

意図を持ってそれを行うことを検討する場合は、次のように行うことができます。

Intent intent = new Intent(Intent.ACTION_EDIT);
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < ICE_CREAM_BUILD_ID) {
    // all SDK below ice cream sandwich
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra("beginTime", startTime);
    intent.putExtra("endTime", endTime);
    intent.putExtra("title", title);
    intent.putExtra("description", description);
    intent.putExtra("eventLocation", location);
    intent.putExtra("allDay", isAllDay);

//  intent.putExtra("rrule", "FREQ=YEARLY");
} else {
    // ice cream sandwich and above
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime);
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime);
    intent.putExtra(Events.TITLE, title);
    intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
    intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY , isAllDay);
    intent.putExtra(Events.DESCRIPTION, description);
    intent.putExtra(Events.EVENT_LOCATION, location);

//  intent.putExtra(Events.RRULE, "FREQ=DAILY;COUNT=10") 
}
try {
    context.startActivity(intent);
    return true;
} catch(Exception e) {
    return false;
}
于 2012-11-09T12:11:37.073 に答える
0

イベントの挿入とカレンダーのlogcatの検索を分析した後、アプリケーションから挿入されたイベントを編集しようとすると、カレンダーが強制的に閉じられたことがわかりました。

その理由は、イベントのTimeZoneフィールド値を設定しておらず、カレンダーでは編集時にnullポインターとして取得されるため、強制的に閉じるようになりました。

私はまた、Android用のlogcatアプリケーションを検索しました私はこれを見つけました

https://play.google.com/store/apps/details?id=org.jtb.alogcat&feature=search_result

すべてのログを検出するには、そのログから非常に便利です。TimeZoneが値nullを入力し、カレンダーアプリケーションがクラッシュしたことを知っています。

挿入時にこの塗りつぶされた値を追加するだけで、完全に機能します。

ICS用

values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

ICSの下

values.put("eventTimezone", TimeZone.getDefault().getID());
于 2012-11-10T09:38:46.837 に答える