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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

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

Q&A

0回答

1729閲覧

cameraAPIで撮影した画像をPERSISTENTに移動させたい(Monaca)

agepan

総合スコア66

Cordova

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Monaca

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

0グッド

1クリップ

投稿2017/08/15 07:14

現在Monacaを利用して、cameraAPIとその撮影データをPERSISTENT領域に保存させる方法を勉強・模索しております。サンプルアプリのコードや他のページで紹介されていたコードを組み合わて調整をしたりすることで、iPhoneでカメラ起動・撮影・アプリ上に表示するところまではできましたが、2枚目以降撮影しても、最初の1枚目の写真が繰り返し表示されてしまう状況です。

今現在のコードで撮影画像がPERSISTENT領域にちゃんと保存されているかもよく分からないのですが、ひとまず複数撮影しても最初の1枚だけが繰り返し表示されてしまう問題箇所が分かればと思い、質問させていただきます。

ちなみに、コード中の「// ■■■ 撮影画像をPERSISTENTへ移動させる ■■■」より下のコードを削除すると、複数枚撮影しても正しく複数枚表示されるようになりますので、このあたりが原因ではないかと見ています。

コードを添付しますので、もし何かお分かりの方いらっしゃいましたらお知恵拝借できたらと思います。
よろしくお願いいたします。

// ■■■ ページ上のボタンをクリックしてカメラ起動 ■■■ function addTodoPicture() { navigator.camera.getPicture( /*カメラ起動成功時はaddTodo実行、キャンセル時はアラート、3番目はセッティング情報*/ addTodo, function() { alert("撮影をキャンセルしました"); }, { quality : 50, destinationType : Camera.DestinationType.FILE_URI, } ); } // ■■■ 撮影した画像をページ上に表示 ■■■ function addTodo(camera_url) { //camera_urlで撮影した画像のパスを取得? var title = $("#todo-title").val(); var body = $("#todo-body").val(); var img_tag = ""; if (camera_url) { img_tag = "<img src='" + camera_url + "'>"; } $.mobile.changePage($("#list-page")); $("#todo-list").append(img_tag) $("#todo-list").listview('refresh'); getFileEntry(camera_url); }; // ■■■ 撮影画像をPERSISTENTへ移動させる ■■■ function getFileEntry(camera_url) { window.resolveLocalFileSystemURL(camera_url, function success(fileEntry) { // Do something with the FileEntry object, like write to it, upload it, etc. // writeFile(fileEntry, camera_url); alert("got file: " + fileEntry.fullPath); // displayFileData(fileEntry.nativeURL, "Native URL"); moveToPersistent(fileEntry); //moveToPersistentを実行してPersistentへデータを移動 }, function () { // 有効な FileEntry オブジェクトを取得できなかった場合、アプリ側の createNewFileEntry を呼び出す createNewFileEntry(camera_url); }); } function createNewFileEntry(camera_url) { window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, function success(dirEntry) { // JPEG file dirEntry.getFile("tempFile.jpeg", { create: true, exclusive: false }, function (fileEntry) { // Do something with it, like write to it, upload it, etc. // writeFile(fileEntry, imgUri); alert("got file: " + fileEntry.fullPath); // displayFileData(fileEntry.fullPath, "File copied to"); }, onErrorCreateFile); }, onErrorResolveUrl); } var persistentDirectoryEntry; document.addEventListener('deviceready', init, false); function init() { // あらかじめPERSISTENTファイルシステムを要求し,DirectoryEntryオブジェクトを取得しておく window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, getPersistentDirectoryEntry, failFS); } function getPersistentDirectoryEntry(fileSystem) { //新しい画像ファイルでタスク登録できない原因はここっぽい persistentDirectoryEntry = fileSystem.root; } function moveToPersistent(fileEntry) { // あらかじめ取得しておいたPERSISTENTファイルシステムのDirectoryEntryオブジェクトと // resolveLocalFileSystemURIメソッドで取得したFileEntryオブジェクトを用いて,ファイルをPERSISTENTに移動 fileEntry.moveTo(persistentDirectoryEntry, fileEntry.name, moveToSuccess, failFS); } function moveToSuccess(fileEntry) { alert('画像ファイル「' + fileEntry.name + '」を移動しました。\n' + fileEntry.fullPath); } function failCamera(message) { alert('カメラ操作に失敗しました。\n' + message); } function failFS(error) { alert('ファイルシステム操作に失敗しました。\nエラーコード: ' + error.code); }

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問