やりたかったこと
ギャラリーをインテントで立ち上げて、そいつが返すURIからファイルパスを取得したい
ハマった内容
- ギャラリーを立ち上げて返ってきたインテントのURI(
data.getData
で取得するやつ)をContentResolver.query
に投げても、_data
の入った情報が返ってこない
理由(確度100%ではない)
- URIの形式に応じて
ContentResolver
がContentProvider
へ問い合わせるが、インテントから取得できるURIだと問い合わせるContentProvider
がMediaProvider
になるため、ファイルのパスが取れない
解決策
- 下記のStackOverflowのコードがさっくり動く(2016年8月時点)ので、利用する
この問題の厄介な点(あるいは愚痴)
- 日本語の情報があまり見当たらない
- 日本語の記事だと、
ContentProvider.query
に問い合わせれば問題なくファイルのパスが取得できるように書いてあるものが多い - StackOverflowの解決策を適用したとしてもやや複雑なので、「そもそもURIのまま扱え」という神のお告げがどこかに存在する可能性がある