Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tateisu/android-local-file
sample app for myself. using SAF,StorageVolume,FileProvider,MediaStore API.
https://github.com/tateisu/android-local-file
Last synced: about 1 month ago
JSON representation
sample app for myself. using SAF,StorageVolume,FileProvider,MediaStore API.
- Host: GitHub
- URL: https://github.com/tateisu/android-local-file
- Owner: tateisu
- Created: 2017-03-19T18:20:47.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-03-23T10:57:21.000Z (almost 8 years ago)
- Last Synced: 2024-10-07T07:41:35.551Z (3 months ago)
- Language: Java
- Size: 705 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# android-local-file
SAFやらFileProviderやらを使ってみたモックアップです## ファイルのある場所
### Context#getDataDirFile
+ /data/data/{package_name}
+ /data/user/#/{package_name}
+ アプリのアンインストールで消える### Context#getDatabasesDir
+ Context#getDataDirFile() + "/databases"
+ 読み書き可能
+ setLastModified可能
+ アプリのアンインストールで消える### Context#getFilesDir
+ getDataDirFile() + "/files"
+ 読み書き可能
+ setLastModified可能
+ アプリのアンインストールで消える### Context#getDir(name)
+ getDataDirFile() + "/app_"+name
+ 読み書き可能
+ setLastModified可能
+ アプリのアンインストールで消える### Context#getCacheDir()
+ getDataDirFile() + "/cache"
+ 読み書き可能
+ setLastModified可能
+ アプリのアンインストールで消える### Context#getExternalFilesDir()
+ /storage/emulated/{number}/Android/data/{package_name}/files/{type}
+ Primary Storage上のプライベートなフォルダ
+ 読み書き可能
+ setLastModified可能
+ (4.4未満はWRITE_EXTERNAL_STORAGE権限が必要)
+ アプリのアンインストールで消える### Context#getExternalCacheDir()
+ /storage/emulated/{number}/Android/data/{package_name}/cache
+ 読み書き可能
+ setLastModified可能
+ (4.4未満はWRITE_EXTERNAL_STORAGE権限が必要)
+ アプリのアンインストールで消える### Environment.getExternalStorageDirectory()
+ /storage/emulated/{number}/
+ WRITE_EXTERNAL_STORAGE権限があれば読み書き可能
+ setLastModifiedは不可能### ACTION_OPEN_DOCUMENT_TREEで取得したフォルダ
+ ACTION_OPEN_DOCUMENT_TREEが使えるのはAPI21(Android 5.0)から
+ ファイルパスへの変換は可能
+ WRITE_EXTERNAL_STORAGE権限があれば読み書き可能
+ 5.0以降でもFile APIを使ってサブフォルダの作成が可能
+ setLastModifiedは不可能
+ プライマリストレージではない場合、ファイルパスへの変換は非公開APIを使えば可能
+ 「StorageManager StorageVolume getPath」で検索
## ローカルファイルを他アプリにシェアする手順### File URIでのシェア
+ Android 7.0以降は無条件にFileUriExposedExceptionが出る
+ Android 4.xまではMIME typeがIntentに指定されていないとビューアが選択肢に出ない### SAFのDocument URIでのシェア
+ MIME type の指定は必須
+ SDカードなどの非プライマリストレージのdocument URIだと対応できないアプリがあるみたい?
+ MIME typeが適切ならQuickPICはプライマリストレージでもSDカードでも開けた### FileProvider のURLを使ったシェア
+ xmlにシェア可能なpathを列挙しておく必要がある
+ 特殊な拡張子を扱うアプリの場合、FileProvider#getType() は必要に応じてオーバライドするべき
+ undocumented だが <root-path /> を指定するとSDカードのファイルもシェアできる### MediaStoreに登録してからシェア
+ MediaStore.Files ならファイル種別に関わらずシェアできる
+ でもやっぱりDB登録時にMIME type の指定が必須
+ externalではないフォルダをシェアしても、結局他アプリからは見れない# MIME type の取得
+ MimeTypeMap を使うと拡張子からMIME type を得られる
+ デジカメのRAW画像など、一覧に情報がないものは得られない