見出し画像

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ファイルなどのデータファイルも同様にして共有することが出来ます。


参考

リファレンス:FileProviderAndroid Developers Docs

Yukiの枝折 『Android:FileProviderでファイル共有
@wakamesoba98『Android 画像ファイルを扱う際のFileとUriまとめ
How do I view my Realm file in the Realm Browser?』stock overflow

この記事が気に入ったらサポートをしてみませんか?