質問: 1; public DBhelper(Context context) { super(context, DBNAME, null, VERSION); } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE sample_test (" + "_id INTEGER PRIMARY KEY, " + "testTEXT TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int old_v, int new_v) { db.execSQL("DROP TABLE IF EXISTS sample_test"); onCreate(db); } } ``` また、マニフェストファイルにパーミッションの記述はしております。 ### 試したこと 参考にさせていただいたサイトを数個挙げます。 AndroidのデータベースファイルをSDカードにコピーする方法 →「FAILED_TO_CREATE_PATH_ON_SD」と出てきてしまう SDカードにファイルを保存する →データベースファイルについてではない SQLiteのDBファイルをSDにコピー →「フォルダの作成に失敗しました」と出てきてしまう。mkdir()が成功していない模様。 Androidでmkdir()を実行してみる →ここを参考に、「/storage/sdcard/Android/data/{プロジェクトパッケージ}/"testtest"」としても上手くいかず。 ### 補足情報(言語/FW/ツール等のバージョンなど) AndroidStudio 2.3.1 エミュレータのAPI 24
回答: ストレージ権限ですがAndroid6.0以降からはユーザー側で権限付与(Runtime Permission)も必要なっています。 確認している環境API24ですので、上記に当たる場合はそちらも付与する必要があります。 本題のファイルをSDカード(外部ストレージ)にコピーする方法についてですが。 LoliPop以降は基本的にStorage Access Frameworkでファイル操作をする必要があります。 面倒な仕様ですので以下の公式をご参照ください。 ストレージ アクセス フレームワーク | Android Developers 補足ですが、外部ストレージ内のファイルについてIntentを利用したファイル共有等を行う場合、MarshmallowまでならFileクラスを利用したりしても動きますが、Nougat以降ですとStorage Access Frameworkに則った方法でUriを利用しないと動きません(確か例外がでたはず)のでご注意を。