📆

Android10からMediaStore#DATE_TAKENがnull になる事がある

2021/02/01に公開

事象

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

IssueTracker: [Android Q Beta] Media Store insert DATE_TAKEN is always null

<b>Status: Won't Fix (Intended Behavior)</b>

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

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

https://developer.android.com/training/data-storage/files/media?hl=ja

対応

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

課題

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

Discussion