3

アプリにイベントのリストがあります。側面のボタンを使用すると、ユーザーはイベントの日付と時刻を自分のカレンダーに追加できます。カレンダー インテントを使用して、対応する日付と時刻の Android カレンダーにユーザーをリダイレクトします。ユーザーがカレンダーにイベントを追加した後、既に追加したイベントに対応する「イベントの追加」ボタンを無効にしたいと思います(ユーザーが同じイベントを再度追加しないようにします)。これどうやってするの?Android 4.0 の新しいカレンダー API を使用しましたが、目的を達成できませんでした。

基本的に私が望むのは、ユーザーのカレンダーで同じイベントのエントリが繰り返されるのを避けることです。

どんな助けでも大歓迎です。

4

4 に答える 4

7

このイベントのインスタンスが存在するかどうかをテストする必要があります。Android の CalendarContract.Instances クラスのドキュメントを参照してください。

この場合、特に2 番目のクエリ メソッドが役立ちます。

この例は、CalendarContract プロバイダーに関するブログ投稿に投稿したコードです。必要に応じて少し変更しています。

long begin = // starting time in milliseconds
long end = // ending time in milliseconds
String[] proj = 
      new String[]{
            Instances._ID, 
            Instances.BEGIN, 
            Instances.END, 
            Instances.EVENT_ID};
Cursor cursor = 
      Instances.query(getContentResolver(), proj, begin, end, "\"Your event title\"");
if (cursor.getCount() > 0) {
   // deal with conflict
}

注意: エポック以降の時間は常に UTC ミリ秒です。そのため、ユーザーのタイムゾーンを考慮して調整する必要がある場合があります。

最後のパラメーターには、カレンダーに追加したイベントのタイトルが含まれている必要があります。引用符を付けておいてください。そうしないと、Android は「your」、「event」、または「title」を検索します。

また、必要な権限を含めることを忘れないでください。

于 2012-11-20T11:00:16.503 に答える
0

私はそれを確認するために次の方法を使用しました...カレンダーにあるかどうかを確認するためにevent_idを渡しています....

public boolean isEventInCal(Context context, String cal_meeting_id) {

     Cursor cursor = context.getContentResolver().query(
     Uri.parse("content://com.android.calendar/events"),
       new String[] { "_id" }, " _id = ? ",
       new String[] { cal_meeting_id }, null);

           if (cursor.moveToFirst()) {
                   //Yes Event Exist...
      return true;
     }
     return false;
    }
于 2013-08-07T04:42:59.283 に答える