[Android]外部ストレージのパスをいつも忘れてしまう

Androidアプリ開発で、カメラを扱ったり、写真や動画を編集したりするときに、外部ストレージにアクセスすることがたまにあります。

AndroidManifest.xmlに設定するuses-permission(パーミッション許可)の設定とか、パスの取得方法(getExternalFilesDir)の情報はすぐ見つかるのですが、実際のパスってどこだっけ?となったので情報を残しておきます。

確認対象

Android 7.0~9.0

このあたりは、Android OSバージョンが古いころ(OS 4系あたり?)から、変わったきた印象があります。

パスの例

/storage/emulated/0/Android/data/com.hogehoge.demoapp/files/..

「com.hogehoge.demoapp」はアプリケーションID
※細かく言うと/data/や/files/とかも変わる
→直接、このパスにはアクセスできない

コマンドやExplorerで直接アクセスする場合は、以下の場所を確認すること。

/sdcard/Android/data/com.hogehoge.demoapp/....

補足

取得方法

AndroidManifest.xmlに以下を追加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

ストレージデバイスの取得処理を記述

Context.getExternalFilesDir()

なお、以下のメソッドは、API29より非推奨となっている。

Environment.getExternalStorageDirectory()
Environment  |  Android Developers

This method was deprecated in API level 29.
To improve user privacy, direct access to shared/external storage devices is deprecated. When an app targets Build.VERSION_CODES.Q, the path returned from this method is no longer directly accessible to apps. Apps can continue to access content stored on shared/external storage by migrating to alternatives such as Context#getExternalFilesDir(String), MediaStore, or Intent#ACTION_OPEN_DOCUMENT.

Android Studioでのアクセス方法

右下の「Device File Explorer」からアクセス

参考

対象範囲別外部ストレージ アクセスを管理する
https://developer.android.com/training/data-storage/files/external-scoped?hl=ja

https://qiita.com/komitake/items/fea18ba082ab9a47a443

コメント

タイトルとURLをコピーしました