サンプル「リバース ジオコーディングを使用してロケーションベースのハイブリッド モバイル アプリを構築する方法」で使用されているコードと同様のコードを使用して、カメラで撮影した画像の dataUrl を取得しようとすると問題が発生します。Android 2.3.5 を搭載した Samsung Galaxy S2 でコードをテストしています。
dataUrl を取得するために使用しているコードは、かなり標準的な JavaScript です。
var toDataURL = function toDataURL(uri, callback)
{
forge.logging.log('toDataURL...');
forge.logging.log(uri);
var image = document.createElement('img');
image.src = uri;
image.onload = function ()
{
forge.logging.log('toDataURL image.onload...');
// create canvas
var canvas = document.createElement('canvas');
canvas.id = 'canvas';
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext('2d');
// draw image to canvas
context.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height);
// get data url
var dataUrl = canvas.toDataURL();
callback(dataUrl);
forge.logging.log('...toDataURL image.onload');
};
forge.logging.log('...toDataURL');
};
問題は、canvas.toDataURL によって返される dataUrl が常に空 ('data:,') であることです。パラメータとして渡された uri は次のように記録されます。
I/Forge (18019): [FORGE] 'content://io.trigger.forgeb6367d6ee13011e1b9ed12313d1adcbe/file___height=640&type=image&uri=content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F44%23Intent%3Bend&width=480&name=Image '
これは、forge.file.URL への呼び出しから次のパラメーターを使用して返されます。
D/Forge (18019): task.params を使用したネイティブ コール "file.URL": {"uri":"content://media/external/images/media/45#Intent;end","name":"Image ","タイプ":"画像","幅":480,"高さ":640}
おそらく、これは権限と関係があります。私の質問は、コードを機能させるにはどうすればよいですか? または、カメラで撮影したファイルのコンテンツを取得する別の方法はありますか? (私の目的は、写真の内容を Web サービスに送信することです。)