AndroidのアプリでAndroid Q以前の端末では問題がなかったのですが、Android Qの端末にて端末内の写真を表示しようとすると下記のエラーが発生してしまう事象で困っております。

E/TEST: ERROR
    java.lang.IllegalArgumentException: Invalid column CAST(STRFTIME('%Y%m%d', datetaken / 1000, 'unixepoch', 'localtime') AS INTEGER) AS format_date_taken
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
        at android.content.ContentProviderProxy.query(ContentProviderNative.java:423)
        at android.content.ContentResolver.query(ContentResolver.java:944)
        at android.content.ContentResolver.query(ContentResolver.java:880)
        at android.support.v4.content.ContentResolverCompat.query(ContentResolverCompat.java:81)
        at jp.app.myapp.upload.multi.cameraroll.HeaderDataCursorLoader.loadInBackground(HeaderDataCursorLoader.java:64)
        at jp.app.myapp.upload.multi.cameraroll.HeaderDataCursorLoader.loadInBackground(HeaderDataCursorLoader.java:21)
        at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:307)
        at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:60)
        at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:48)
        at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:141)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

再現ソースコードは下記になります。

public class HeaderDataCursorLoader extends AsyncTaskLoader<HeaderDataCursor> {
    public HeaderDataCursor loadInBackground() {
        try {
            String columnName = android.provider.MediaStore.Images.ImageColumns.DATE_TAKEN;
            String[] projection = new String[]{
                    BaseColumns._ID,
                    "CAST(STRFTIME('%Y%m%d', " + columnName + " / 1000, 'unixepoch', 'localtime') AS INTEGER) AS format_date_taken",
                    columnName
            };
            Cursor dataCursor = android.support.v4.content.ContentResolverCompat.query(
                    getContext().getContentResolver(),
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    projection, null, null, null, null);
        } catch (Exception e) {
            android.util.Log.e("TEST", "ERROR", e);
        }
    }
}

java.lang.IllegalArgumentException: Invalid column CAST(STRFTIME('%Y%m%d', datetaken / 1000, 'unixepoch', 'localtime') AS INTEGER) AS format_date_takenとあったので、この部分を削除すると表示はされるのですが、なぜそうなってしまうのかの原因がわからずに困っております。
※ このCASTした値を、後で使いたいため。

こちらのサイトに記載されているように、Android Qからストレージにアクセスする方法が変更されているとのことなのですが、AndroidManifestにrequestLegacyExternalStorage="true"を追加しても同様のエラーが出てしまっているので、根本解決をしたいと思っているのですが、どのように修正をすればよいのかがわからずに困っております。

解決方法をご教授して頂きますと幸いでございます。
※ 可能であれば、APIレベルはあげずに対応が出来れば助かります。。

何卒、よろしくお願いいたします。

環境

  • Android Studio3.5
  • compileSdkVersion = 28
  • buildToolsVersion = "28.0.3"
  • targetSdkVersion = 28