2017-10-11 14 views
2

イベントを予定表にプログラムで追加したいとします。私は以下のコードを使用してカレンダーイベントを作成しています。カレンダーに予定を追加すると間違った終了日が表示される

Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setType("vnd.android.cursor.item/event"); 
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, DateUtils.getMiliseconds("10/10/2017", "09:02 AM"); 
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, DateUtils.getMiliseconds("10/13/2017", "05:02 PM")); 
intent.putExtra(CalendarContract.Events.TITLE, "my title"); 
intent.putExtra(CalendarContract.Events.EVENT_LOCATION, "my location"); 
startActivity(intent); 

ここでDateUtils.getMilisecondsは私の方法です。

static long getMiliseconds(String date, String time){ 

    try{ 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a"); 
     Date date1 = sdf.parse(date+" "+time); 
     Calendar cal1 = Calendar.getInstance(); 
     cal1.setTime(date1); 
     Calendar beginCal = Calendar.getInstance(); 

     beginCal.set(cal1.get(Calendar.YEAR),cal1.get(Calendar.MONTH), cal1.get(Calendar.DAY_OF_MONTH), cal1.get(Calendar.HOUR_OF_DAY), cal1.get(Calendar.MINUTE)); 
     return beginCal.getTimeInMillis(); 
    } 
    catch (Exception e) { 
     return new Date().getTime(); 
    } 
} 

ここでは、同じ方法で開始時間と終了時間の両方をミリ秒で取得しています。カレンダーイベントで正しい開始時刻が10/10/2017 9:02 AMになっています。ただし、終了時間は10/13/2017 5:02 PMではなく、10/10/2017 10:02 AMです。

私はずっと利用可能な解決策をstackoverflowで試しましたが、私の解決策はありません。

私はまた、代わりにEXTRA_EVENT_BEGIN_TIMEEXTRA_EVENT_END_TIMEEvents.DTSTARTEvents.DTSTARTを渡してみましたが、それはあまりにも間違った日付が表示されます。代わりに

Calendar cal1 = Calendar.getInstance(); 

+0

私は今日の日付=新しい日付(getMiliseconds( "10/13/2017"、 "05:02 PM"))を使用しました。それは私に滑らかな金を与えた10月13日17:02:36 CEST 2017は全く問題なしで印刷されました。 (Eclipse Java IDE) – koksalb

+0

確認:intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME、新しい日付(getMiliseconds( "10/10/2017"、 "09:02 AM"))); intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME、新しいDate(getMiliseconds( "10/13/2017"、 "05:02 PM"))); Android 5.xおよび6.x(AndroidスタジオIDE)で問題なく動作し、インテントを管理します インテントの結果:バンドル[{endTime = Fri Oct 13 17:02:17 GMT + 00:00 2017、 beginTime = Tue Oct 10 09:02:17 GMT + 00:00 2017、eventLocation = my location、title = my title}] – koksalb

+0

バージョン6.0では正常に動作していますが、5.1では正常に動作していません。これにはどんな解決策がありますか? @koksalb – Pooja

答えて

1

私はあなたのgetMilisecondsメソッドを実行すると、それが戻っているミリ秒単位の時刻が正しいように思わを助け願っています。これは、Googleカレンダーで、endTimeのパラメータを無視し、デフォルト値「startTime + 1時間」をendTimeの値として使用している場合の問題です。

このGoogleの問題追跡ツールを確認してください:Google Calendar does not respect event start and end times received via intentこの問題は、Android 5.0の一部のバージョンを実行している端末の株価カレンダーアプリのバグが原因だったようです。 Android 4.4.4では正常に動作しました。

ほとんどの場合、アプリを最新のバージョンに更新すると、問題が修正され、他のユーザーは携帯端末のカレンダーアプリケーションのアップデートをアンインストールしても問題ありません。テストしているデバイスの上記2つのオプションを試してください。それが役に立てば幸い。

+0

バージョン6.0では完全に正常に動作していますが、5.1では正常に動作していません。これにはどんな解決策がありますか? – Pooja

+0

解決策がありますが、それがうまくいくかどうかはわかりません。試してみる価値。 https://stackoverflow.com/a/21942177/1306419。 OS /カレンダーアプリ側のバグのように思えるので、それらのアップデートだけで修正できます。私が答えて言ったように、試してみるべきことの1つは、 'Calendar'アプリの' App info'に行き、 'Uninstall Updates'というオプションを探すことです。それはボタンかメニューオプションのいずれかになります。試して、それをあなたのデバイスで動作させるために使用してください。それがうまくいかない場合は、あなたのカレンダーアプリがバグを修正したことを期待して、カレンダーアプリが最新かつ最新のプレイストアであることを確認してください。 –

+0

問題を指摘してくれてありがとう。私はカレンダーの作品を再インストールすると思います。私はあなたの答えを受け入れるでしょう。 – Pooja

0

はそれを試してみてください。

calendar = Calendar.getInstance(TimeZone.getDefault()); 

を、それが

+0

それでもなお同じ結果。 – Pooja

関連する問題