質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

0回答

1471閲覧

Monacaのファイル操作プラグインで書き込みエラーになる

退会済みユーザー

退会済みユーザー

総合スコア0

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

0クリップ

投稿2021/02/10 14:11

編集2021/02/14 04:39

前提・実現したいこと

Monacaで画像を編集して端末に保存するアプリを作成しています。
ファイル操作プラグイン cordova-plugin-file を使用し、
cordova.file.externalRootDirectory(file:///storage/emulated/0/)配下にフォルダを作成して
その中にファイルの書き込みをしたいです。

発生している問題・エラーメッセージ

Android端末のカスタムデバッガーでもデバッグビルドアプリでも試しているのですが
getDirectoryで下記のエラーが返ってきます。

{"code":12}

フォルダを作成せず直にファイルを作成しようとしても、getFileで下記のエラーが返ってきます。

{"code":9}

該当のソースコード

JavaScript

1var permissions = cordova.plugins.permissions 2 3permissions.checkPermission(permissions.READ_EXTERNAL_STORAGE, function (readStatus) { 4 5 if (readStatus.hasPermission) { 6 console.log('READ_EXTERNAL_STORAGE YES') 7 8 permissions.checkPermission(permissions.WRITE_EXTERNAL_STORAGE, function (writeStatus) { 9 10 if (writeStatus.hasPermission) { 11 console.log('WRITE_EXTERNAL_STORAGE YES') 12 13 this.downloadFile(blob) 14 15 } else { 16 console.log('WRITE_EXTERNAL_STORAGE NO') 17 18 permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, function (status) { 19 20 if (status.hasPermission) { 21 console.log('request WRITE_EXTERNAL_STORAGE OK') 22 23 this.downloadFile(blob) 24 25 } else { 26 console.log('request WRITE_EXTERNAL_STORAGE NG') 27 } 28 29 }, function () { 30 console.log('permission WRITE_EXTERNAL_STORAGE is not turned on') 31 }) 32 } 33 }) 34 35 } else { 36 console.log('READ_EXTERNAL_STORAGE NO') 37 38 permissions.requestPermissions([permissions.READ_EXTERNAL_STORAGE, permissions.WRITE_EXTERNAL_STORAGE], function (status) { 39 40 if (status.hasPermission) { 41 console.log('request READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE OK') 42 43 this.downloadFile(blob) 44 45 } else { 46 console.log('request READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE NG') 47 } 48 49 }, function() { 50 console.log('permission READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE is not turned on') 51 }) 52 } 53 54}, function () { 55 console.log('checkPermission error') 56}) 57 58 59downloadFile(blob) { 60 61 var saveDirectory = '' 62 if (monaca.isAndroid) { 63 saveDirectory = cordova.file.externalRootDirectory 64 } else if (monaca.isIOS) { 65 saveDirectory = cordova.file.documentsDirectory 66 } 67 68 var fileName = 'mypicture.jpg' 69 70 window.resolveLocalFileSystemURL(saveDirectory, function (dirEntry) { 71 72 dirEntry.getDirectory('MyAppFolder', { create: true, exclusive: false }, function (subDirEntry) { 73 74 subDirEntry.getFile(fileName, { create: true, exclusive: false }, function (fileEntry) { 75 76 fileEntry.createWriter(function (fileWriter) { 77 78 fileWriter.onwriteend = function () { 79 console.log('ファイル保存完了') 80 console.log(fileEntry.toURL()) 81 } 82 83 fileWriter.onerror = function (err) { 84 console.log('Failed file write: ' + JSON.stringify(err)) 85 } 86 87 fileWriter.write(blob) 88 89 }, function (err) { 90 console.log('createWriter error: ' + JSON.stringify(err)) 91 }) 92 93 }, function (err) { 94 console.log('getFile error: ' + JSON.stringify(err)) 95 }) 96 97 }, function (err) { 98 console.log('getDirectory error: ' + JSON.stringify(error)) 99 }) 100 }) 101}

試したこと

config.xml に以下は追加済みです。

<widget (略) xmlns:android="http://schemas.android.com/apk/res/android" (略) > <preference name="iosExtraFilesystems" value="library,library-nosync,documents,documents-nosync,cache,bundle,root"/> <preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root"/> <platform name="android"> <custom-config-file target="AndroidManifest.xml" parent="/*"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> </custom-config-file>

externalApplicationStorageDirectory や
externalDataDirectory だと書き込みが成功します。

補足情報(FW/ツールのバージョンなど)

Cordova CLI Version 10.0.0
Androidプラットフォーム 9.0.0

cordova-plugin-file@6.0.2
cordova-plugin-android-permissions@1.1.2
cordova-custom-config@5.1.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問