target sdk30でpixelのAndroid11端末にて、ContentResolverでLimit句のあるクエリを発行すると下記のエラーが発生するようになった

1
java.lang.IllegalArgumentException: Invalid token limit

手元ではpixel5でしか試していないが、twitterで同様の現象について発言している方もいたのでおそらくpixelで起こる現象なのでしょう

この場合こちらのBundleを渡すqueryを使うことで解決可能です https://developer.android.com/reference/android/content/ContentResolver#query(android.net.Uri,%20java.lang.String[],%20android.os.Bundle,%20android.os.CancellationSignal)

ただし、このAPIはapi level26からなのでバージョンで分けて使用する必要があります

こんな感じ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      contentResolver.query(
        uri,
        projection,
        bundleOf(
          ContentResolver.QUERY_ARG_SQL_SORT_ORDER to order,
          ContentResolver.QUERY_ARG_SQL_SELECTION to selection,
          ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS to selectionArg,
          ContentResolver.QUERY_ARG_OFFSET to offset,
          ContentResolver.QUERY_ARG_LIMIT to limit,
        ),
        null
      )
    } else {
      contentResolver.query(
        uri,
        projection,
        selection,
        selectionArg,
        "$order limit $limit offset $offset"
      )

これからはこっちのqueryを使えっていうことなんでしょうか 🤔