LoginSignup
8
9

More than 5 years have passed since last update.

[android]SDカードのpathの取得

Posted at

はじめに

    javaの基本的な理解はできている
    androidStudioの導入が完了している
同じく、開発初心者による備忘録のような形になります。
Day1.AndroidStudioにおけるプロジェクトの作り方
Day2.Androidアプリケーションの構成
Day3.アプリケーションのレイアウト
Day4.onClickListenerの実装とその後の処理
Day5.Activityのライフサイクル
Day6.xmlで枠を指定する

Environmentクラス

androidアプリ開発でのデータの保存についてです。
機種ごとに保存pathが違ったり4.2以降はマルチユーザー対応(タブレットのみ)によってストレージの扱いが変わっていたりなど大変なんです。直接参照している場合はファイルが見つからないため落ちます。ですので基本的にハードコーディングはやめるべきです。何よりも互換性がなくなります。(androidでは致命傷でしょう...)
御託はどうでもいいからpathの取得の仕方を教えろ、という方は一番下に行けば幸せになれるでしょう。

そこで使用されるのがEnvironmentClassです。

Environment.getXXXDirectory()

Environment.getXXXDirectoryを呼び出すことでFileインスタンスの取得ができます。
種類としては

  • getDataDirectory
  • getDownloadCacheDirectory
  • getExternalStrageDirectory
  • getRootDirectory

です。
今回はExternalStrageDirectoryを用いてSDカードにアクセスします。

アプリの専用保存場所の取得

データの保存場所はroot Directoryにしないほうがいいでしょう。理由としては、アンインストールした時にそのアプリで生み出されたごみが残ります。
あなたもデスクトップが汚いのは気になるでしょう。

アプリにはそれぞれ専用の保存領域が確保されています。さらにAcitivty内のメソッドで簡単に取得できます。

  • getExternalFilesDir(String string)
  • getExternalStoragePublicDirectory(String type)

getExternalFilesDir

ファイルを置くディレクトリpahtを取得できます。
ここはアプリ固有のファイルの置場所でアプリがアンインストールされた際一緒に消されます。また、ファイルにロックはかかってないので外部から参照(読み書き)することも可能です。

getExternalFilesDir

publicなディレクトリを取得できます。
typeを指定することでさまざまな場所を動的に取得できます。
よく使われるtypesとしては

  • DCIM
  • DOWNLOADS

でしょうか。
名前のままですが カメラとダウンロードを取得できます。

.java
 File pathExternalPublicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

上記でダウンロードディレクトリのpathを取得できます。

以上です。

.java
 File pathExternalPublicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

せっかちな人のためにカメラのディレクトリpahtの取得の記述も書いておきます。

8
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9