AndroidでUriからパス取得する本当に正しい方法

この方法が分からなかったので。

▼ 例えば次のURIがあるとする

▼ これから実際のパスを取得したい

意外とやり方が面倒で困りました。

そこで自分への忘備録も兼ね、
AndroidでUriからパス取得する方法をまとめます。

まずは間違ったパス取得やり方について...

まずは失敗したやり方から

最初はこういうコードを書いてみました。

▼ 例えばこういうコード

このコードの出力が path : null  に...

でも、なぜかググるとこの方法が出てきます。

どうやら完全に非推奨になったやり方みたいです。

KitKat以降でUriからパス取得するには

実はさっきの間違った方法・・・

Android3.0未満でのみ有効です。

実際は次のバージョンごとに条件分岐が必要です。

  • Android4.4以上(KitKat以降)
  • Android3.1~3.2
  • それ以外の古いバージョン

現在はAndroid3未満のシェアはかなり低いです。

そこでKitKat以降の正しい方法だけまとめます。

 

その Uri => パス への変換方法がこちら

▼ こういうコードを試してみた

今度はしっかりとパス取得できました。

ただURIを渡すだけではだめで、SQLのWHERE句に相当するもの( = MediaStore.Images.Media._ID + "=?"  )とその引数(= new String[]{id}  )を渡す必要があるみたいですね。

そうすれば問題なく取得可能。

Android4.4以降なら全部カバーできます。

APIレベルごとにパス取得処理を切り替え

実用的にはAPIレベルごとに切り替えます。

▼ 切り替えのコード例

こういう風にAPIバージョンに応じて処理切り替えが確実ですが、Android4.4以降がターゲットならこういう切り替えは必要ありません。自分自身もこういうコードは書かないです。

でも念のためにコードを載せておきます。

以上、AndroidでのUriからパス取得でした。

間違いがあればコメントからどうぞ、ではまた(^^)/~~~