Android10でMediaStore#DATE_TAKENがnull になる

Android Q から、Exifがない画像は、MediaStore.MediaColumns.DATE_TAKEN(撮影日)がnullになってしまうようです。以前はExifがない場合は追加日 or 変更日が設定されていたようです。

事象

https://issuetracker.google.com/issues/140250785

Status: Won't Fix (Intended Behavior)

DATE_TAKENは「メディアアイテムが撮影された時間」であると文書化されており、そのAPI記述を実現するために、"DateTimeOriginal" Exifメタデータフィールド、または.DATE_TAKENに基づいてこれを入力します。 スキャンされるファイルにこのメタデータがない場合、ファイルが撮影された時間を正確に判断できないため、誤解を招くようなデータを避けるためにDATE_TAKENはNULLに設定されます。

MediaStoreから写真/動画を取得し、DATE_TAKENをソートのキーや、ユーザに伝わる写真の日付に使っているアプリは、対応が必要そうです。言いたいことはわかるけど...辛み...

developer.android.com

対応

後述の課題が許容/無関係できるのであれば、DATE_TAKENがnullの場合、DATE_ADDEDDATE_MODIFIEDヘフォールバックするのが良さそう。

課題

  • DATE_TAKENがミリ秒(milliSeconds)で、DATE_ADDEDDATE_MODIFIEDは秒(seconds)
  • DATE_TAKENDATE_ADDEDDATE_MODIFIEDは当然だが桁を揃えても数秒違う