2011-10-05 12 views
6

自分の電話からカレンダーの予定を自分のコードから更新しようとしていますが、context.getContentResolver()。updateは0を返し続けます。私がカレンダーアプリでそれを見るイベント。コードから携帯電話のカレンダーの予定を更新できません

context.getContentResolver()。queryを使用してイベントID、開始時刻などを取得しています。イベントIDを想定しているので、431,4,233などの固有の番号が取得されています。使用しているのは本当です。

これを行う公式の方法は、update()を使用する代わりにGoogleのサーバーを経由することですが、私の実装ではそうするのは意味がありません(一般的には、 。

私は何か間違っているのですか、Androidが単に許可しないことをやろうとしていますか?

関連の質問は返信なしでここに掲載されました
Uri updateEventUri = ContentUris.withAppendedId(Uri.parse("content://com.android.calendar/events"), id); 

ContentValues cv = new ContentValues(); 
begin.set(Calendar.HOUR_OF_DAY, arg0.getCurrentHour()); //begin is a java.util.Calendar object 
begin.set(Calendar.MINUTE, arg0.getCurrentMinute()); 
//cv.put("_id", id); 
//cv.put("title", "yeahyeahyeah!"); 
cv.put("dtstart", begin.getTimeInMillis()); 
int updatedrowcount = context.getContentResolver().update(updateEventUri, cv, null, null); 
System.out.println("updated "+updatedrowcount+" rows with id "+id); 

https://stackoverflow.com/questions/5636350/update-android-calendar-event

は、私が何かを明確にできるかどうか私に教えてください。私はあなたと人形が提供できるどんな情報も本当にありがとう!

+0

私はユーザの許可がそれと関係がないことを願っています – the100rabh

+0

私の一部はそうだった/そうです。少なくともそれは簡単な修正であろう。私はandroid.permission.READ_CALENDARとandroid.permission.WRITE_CALENDARをマニフェスト – atraudes

+0

に設定しています。変更しようとしているカレンダーは私のメインのGoogleカレンダーですので、読んだだけで何かは分かりません – atraudes

答えて

3

私は多くのことを試してみましたし、最終的に(ただし信頼性なし)解決策になってしまった..しかし、正常に動作します。..

public static boolean updateCalendar(Context context,String cal_Id,String eventId) 
    { 
    try{ 

     Uri CALENDAR_URI = Uri.parse(CAL_URI+"events"); 
     Cursor c = context.getContentResolver().query(CALENDAR_URI, null, null, null, null); 
     String[] s = c.getColumnNames(); 

     if (c.moveToFirst()) 
     { 
       while (c.moveToNext()) 
      { 

       String _id = c.getString(c.getColumnIndex("_id")); 
       String CalId = c.getString(c.getColumnIndex("calendar_id"));    
       if ((_id==null) && (CalId == null)) 
       { 
           return false; 
       } 
       else 
       { 
        if (_id.equals(eventId) && CalId.equals(cal_Id)) 
           { 
         Uri uri = ContentUris.withAppendedId(CALENDAR_URI, Integer.parseInt(_id)); 
         context.getContentResolver().update(uri, null, null, null);// need to give your data here 
         return true; 
        } 
       } 
      } 
     } 


    } 
    finally 
    { 
     return true; 
    } 
    } 

、最終的に私はそれがすべてのデバイスで動作するかどうかわからないていました。

+0

私はこの最後の数時間働いたあなたの提案が私を答えに導いたと思う。私は解決策の詳細を投稿し、今晩はそれを解き終えると答えを受け入れるようにします。ありがとうございました! – atraudes

2

問題は、イベントをフェッチして編集する間に異なるURIを使用していたことでした。 hereのコードサンプルを使用し、イベントを取得して画面に表示するには、 "content://com.android.calendar/instances/when"というURIを使用していました。私が変更を加えたとき、上の私の例のようにidで編集するために "content://com.android.calendar/events"を使っていました。

あなたの応答のおかげで、ntcは、2つのURI間のイベントのIDが異なっていたため、それぞれが提供していた情報でイベントを一貫して編集できませんでした。私はシステムIDと電話に普遍的なイベントIDを想定していました。

私はいくつかのテストを行う必要があり、どのハードウェアがこの方法と互換性がないかを確認する必要があります。私はテストのためにHTC Evoを使用しています。

+0

私はこれがなぜそうであるのか誰の入力が大好きです。私はそれを今働いているが、なぜ私のIDが違っていたのか困惑している – atraudes

0

Instancesテーブルを照会するときは、Instances._IDの代わりにInstances.EVENT_IDを使用して、編集するイベントの識別子を取得します。

関連する問題