0

タイムテーブル付きのスケジュールを作成しています。私の質問は、新しいイベントを作成する必要があるときに、このコードでアクティビティを呼び出すことです。

   public void callEventDialog(int line, int column){
    Intent intent = new Intent(Intent.ACTION_EDIT);
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(startWeek.getTimeInMillis() + column * DIM + line * 30 * 60 * 1000);
    intent.setType("vnd.android.cursor.item/event");
    intent.putExtra(Events.TITLE, "title");
    intent.putExtra(Events.DTSTART, c.getTimeInMillis());
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, c.getTimeInMillis());
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, c.getTimeInMillis() + 1800 * 1000);
    intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
    startActivityForResult(intent, 100);
}

しかし、[OK] ボタンをクリックすると、カレンダーのアクティビティを表示したくありません。カレンダーではなく、イベントの登録だけで済みます。どうすればこれを行うことができますか??? お時間をいただきありがとうございます。

ここに画像の説明を入力

4

1 に答える 1

1

イベントをカレンダーに直接追加する場合は、コンテンツ リゾルバーを使用してカレンダーのアクセス許可を要求する必要があります。カレンダー アクティビティは使用されません。

マニフェストの権限:

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

イベントをデータベースに入れる例:

public static int insertEventToDb(Context context, Event event, int calendarId) {
    ContentValues values = new ContentValues();

    values.put(Events.CALENDAR_ID, calendarId);
    values.put(Events.TITLE, event.getName());
    values.put(Events.EVENT_LOCATION, event.getLocation());
    values.put(Events.DTSTART, event.getStartDate().getTime());
    values.put(Events.DTEND, event.getEndDate().getTime());
    values.put(Events.DESCRIPTION, event.getDescription());
    values.put(Events.EVENT_TIMEZONE, TimeZone.getTimeZone("GMT+1").getID());

    Uri result = context.getContentResolver().insert(Events.CONTENT_URI, values);
    int eventId = Integer.valueOf(result.getPathSegments().get(1));
    return eventId;
}

データを挿入するカレンダーの ID も必要です。SQLiteクエリを使用してそれを見つけるか、独自のカレンダーを作成することでそれを取得できます(これは を介し​​てのみ行う必要がありますSyncAdapter)。これは別の例です。おそらく必要に応じて変更する必要があります (これConstants.ACCOUNT_TYPEは私のカスタムです)。

Uri uri = Calendars.CONTENT_URI.buildUpon()
                .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true")
                .appendQueryParameter(Calendars.ACCOUNT_NAME, "LOCAL")
                .appendQueryParameter(Calendars.ACCOUNT_TYPE, Constants.ACCOUNT_TYPE).build();
Cursor cursor = context.getContentResolver().query(uri, new String[] {Calendars._ID}, null, null, null);

詳細については、Android デベロッパー サイト - Calendar Providerを参照してください。

于 2013-02-01T17:14:58.020 に答える