【Android】Kotlinで内部ストレージと外部ストレージのパスを取得する
2020.07.01
こんにちは、せんだです。
まだまだ、ジメジメ蒸し蒸しが続く辛い季節。さーーーっと過ぎてほしい。
夏は夏で辛いのだけど、ジメジメよりはいいかな…と思う今日この頃。
さて、今回は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
それでは、また!!
↓↓↓ぜひチェックしてください
~提供中のヒューマンセンシング技術~
◆人物検出技術
歩行者・来店者数計測やロボット搭載も
https://humandetect.pas-ta.io
◆視線検出技術
アイトラッキングや次世代UIに
https://eyetrack.pas-ta.io
◆生体判定技術
eKYC・顔認証のなりすまし対策を!
https://bio-check.pas-ta.io
◆目検出技術
あらゆる目周りデータを高精度に取得
https://pupil.pas-ta.io
◆音声感情認識技術
会話から怒りや喜びの感情を判定
https://feeling.pas-ta.io
◆虹彩認証技術
目の虹彩を利用した生体認証技術
https://iris.pas-ta.io