【Android】Kotlinで内部ストレージと外部ストレージのパスを取得する

2020.07.01

Androidのストレージを学ぶ

 

 

こんにちは、せんだです。

 

まだまだ、ジメジメ蒸し蒸しが続く辛い季節。さーーーっと過ぎてほしい。

夏は夏で辛いのだけど、ジメジメよりはいいかな…と思う今日この頃。

 

さて、今回はAndroidの外部ストレージ、内部ストレージについて簡単にまとめてみたいと思います。

 

ちなみに公式サイトの情報はこちらです。

 

内部ストレージとは

公式ではこのように書かれています。

 

端末のファイル システムにアプリのプライベート ファイルを保存します

 

これは、簡単にいうと他のアプリからはアクセスができない場所ということのようです。

もっと簡単にいうと他のアプリからアクセスする必要がないものを、保存する場所だよって事かと思います。(簡単か?w)

ちなみに、ここでいう他のアプリというのは主にはファイル管理アプリのようなものイメージすると良いのかなと思います。

 

アプリ開発者が使うとすると、アプリに関する設定ファイルや何かしらの一時ファイルを保存したりという感じでしょうか。

(DBから取得したデータをGoogleDrive等にアップロードする時とか?)

 

Kotlinだとこんな感じで取得できます。

 

Main.Activity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val internal = applicationContext.filesDir
        val cache = applicationContext.cacheDir

        Log.v("### Internal ###", "$internal")
        Log.v("### Internal Cache ###", "$cache")
    }
}

 

出力結果

1
2
### Internal ###: /data/user/0/com.example.myapplication/files
### Internal Cache ###: /data/user/0/com.example.myapplication/cache

 

 

外部ストレージとは

公式ではこのように書かれています。

 

共有外部ファイルシステムにファイルを保存します。これは、通常は写真などの共有ユーザー ファイル用です。

 

こちらは書いてあることそのままなのかなと思いますが、写真や動画等、他のアプリを使って共有、閲覧などをしたいファイルを置いてねという事かと思います。保存先はSDカードです。

 

アプリ開発者の使い所としても上記の通りですが、アプリで撮影した写真や動画、共有が必要なその他のファイルを保存する場合はこちらを使うのが良いでしょう。

保存したファイルはファイル管理アプリでも見れるので、デバッグもしやすいかも。

 

Kotlinだとこんな感じで取得できます。

 

Main.Activity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Main.Activity

package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val external = applicationContext.getExternalFilesDir(Environment.DIRECTORY_MOVIES)
        val cache = applicationContext.externalCacheDir

        Log.v("### External ###", "$external")
        Log.v("### External Cache ###", "$cache")
    }
}

 

出力結果

1
2
### External ###: /storage/emulated/0/Android/data/com.example.myapplication/files/Movies
### External Cache ###: /storage/emulated/0/Android/data/com.example.myapplication/cache

ちなみに、Environmentは他にも下記のようなものを指定できます。

  • Environment.DIRECTORY_PICTURES
  • Environment.DIRECTORY_DOWNLOADS
  • Environment.DIRECTORY_DOCUMENTS

 

外部ストレージに書き込みを行う場合はAndroidManiefest.xmlに下記を追記します。

AndroidManifest.xml

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

 

 

まとめ

今回はせんだの備忘録のような感じになってしまいましたが(大体技術系の記事はいつもそう…)、なんとなく違いがお分かりいただけたでしょうか?

 

超簡単にまとめると

  • 内部ストレージは他のアプリに見せたくないものを保存しようね
  • 外部ストレージは他のアプリに見せたいものを保存しようね

ってことですねwww

 

それでは、また!!

 


Top