AndroidのContentResolver経由でURIからファイルパスを取り出す際にドハマリした件

  • 3
    いいね
  • 1
    コメント

やりたかったこと

ギャラリーをインテントで立ち上げて、そいつが返すURIからファイルパスを取得したい

ハマった内容

  • ギャラリーを立ち上げて返ってきたインテントのURI(data.getDataで取得するやつ)をContentResolver.queryに投げても、_dataの入った情報が返ってこない

理由(確度100%ではない)

  • URIの形式に応じてContentResolverContentProviderへ問い合わせるが、インテントから取得できるURIだと問い合わせるContentProviderMediaProviderになるため、ファイルのパスが取れない

解決策

この問題の厄介な点(あるいは愚痴)

  • 日本語の情報があまり見当たらない
  • 日本語の記事だと、ContentProvider.queryに問い合わせれば問題なくファイルのパスが取得できるように書いてあるものが多い
  • StackOverflowの解決策を適用したとしてもやや複雑なので、「そもそもURIのまま扱え」という神のお告げがどこかに存在する可能性がある