FileProvider+Intent(ACTION_SEND)を使って「default.realm」を取り出す
やりたい事
アプリ上でdefault.realmをOneDriveに保存し、PCからRealm Studioを使って中身を確認する(下図はPC上):
アプリからOneDriveに保存するのは、Intent(ACTION_SEND)を使う:
なお、共有(SEND)出来るように、FileProviderを用いました。
※ OneDriveアプリは端末(Android)にインストール済み。
Realmデータベースのデフォルトの保存先
Realmデータベースのデフォルトでの保存先は、
data/data/パッケージ名/files/default.realm
となっています。下図のように[Device File Explorer]を使えば直接保存先のファイルを見ることが出来ます。
そして、例えば上図のようにして、このファイルをPC上に保存すれば
Realm Studioを使ってDBの中身を見ることができます。
ただ、このやり方でdefault.realmをPC上に保存するのは少し面倒なので、FileProvider+Intent(ACTION_SEND)を使って、default.realmを共有(OneDriveやGoogleドライブに保存したりGメールに添付)する方法を調べてみました。
サンプルコード(Android:Kotlin)
manifests/AndroidManifest.xml
<application>
(省略)
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths"/>
</provider>
(省略)
<application>
FileProviderに関する設定を<application>内に記述
res/xml/paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="doc" path="." />
</paths >
<files-path>:filesDir.pathに対応したタグ
path=".":default.realmはfilesDir.pathの直下に作られるので
MainActivity.kt
(関連する部分だけ抜粋)
val shareFile = File(this.filesDir.path + "/default.realm")
val shareUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", shareFile)
val intent = Intent(Intent.ACTION_SEND)
intent.type ="plain/text"
intent.putExtra(Intent.EXTRA_STREAM, shareUri)
startActivity(intent)
補足
今回はRealmデータベースについてでしたが、CSVファイルなどのデータファイルも同様にして共有することが出来ます。
参考
『リファレンス:FileProvider』Android Developers Docs
Yukiの枝折 『Android:FileProviderでファイル共有』
@wakamesoba98『Android 画像ファイルを扱う際のFileとUriまとめ』
『How do I view my Realm file in the Realm Browser?』stock overflow