Android アプリの開発に phonegap 2.9 を使用しています。携帯電話のギャラリーから画像をアップロードしているときに、エラー コード 3 が表示されます。
http://docs.phonegap.com/en/2.9.0/cordova_camera_camera.md.html#Cameraで提供されている phonegap のドキュメントに従っています。画像をアップロードするために、ファイル転送 phonegap のドキュメント http: //docs.phonegap.com/en/2.9.0/cordova_file_file.md.html#ファイル.
電話のギャラリーから画像を選択する際に問題はありません。しかし、Web サーバーにアップロードするとアラート ボックスにエラーが表示されます。
電話のギャラリーからサーバーへの画像の選択とアップロードは、samsung grand、samsung s、htc では完全に正常に機能しますが、samsung s3 および s4 でのテスト中にエラー コード 3、つまり接続エラーが発生します。
ほとんどの場合、画像をキャプチャした後、またはギャラリーから画像を選択した後、アプリケーションが再起動します。
どんな種類の助けもいただければ幸いです。
js コード:
<script type="text/javascript" charset="utf-8"> window.picsrc=""; window.myImage=""; var pictureSource; // picture source var destinationType; // sets the format of returned value document.addEventListener("deviceready",onDeviceReady,false); function onDeviceReady() { pictureSource=navigator.camera.PictureSourceType; destinationType=navigator.camera.DestinationType; } function onPhotoDataSuccess(imageData) { var smallImage = document.getElementById('smallImage'); smallImage.style.display = 'block'; smallImage.src = "data:image/jpeg;base64," + imageData; picsrc="data:image/jpeg;base64," + imageData; myImage=imageData; document.getElementById('eme').value=myImage; } function onPhotoURISuccess(imageURI) { var smallImages = document.getElementById('smallImage'); smallImages.style.display = 'block'; smallImages.src = imageURI; <?php if($plat=="iOS"){?> document.getElementById('smallImage').style.display = 'none'; document.getElementById('nophoto').innerHTML = "Your Photo has been recieved"; <?php }?> picsrc=imageURI; myImage=imageURI; } function capturePhoto(){ document.getElementById('upload_uri').style.display= 'none'; document.getElementById('hide_upload').style.display= 'block'; navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50, destinationType: destinationType.DATA_URL, targetWidth: 464}); camera.correctOrientation(true); }); } function capturePhotoEdit() { alert('edit'); navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true, destinationType: destinationType.DATA_URL }); } function getPhoto(source) { navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, destinationType: destinationType.FILE_URI, sourceType: source, correctOrientation: true, allowEdit: true}); document.getElementById('hide_upload').style.display= 'none'; document.getElementById('upload_uri').style.display= 'block'; } function onFail(message) { alert('Failed because: ' + message); } function photoUpload() { var img = document.getElementById('smallImage'); myImage = img.src; if (myImage=="") { alert("take picture first"); } var options = new FileUploadOptions(); options.fileKey="file"; options.fileName=myImage.substr(myImage.lastIndexOf('/')+1); options.mimeType="image/jpeg"; var params = new Object(); params.value1 = "test"; params.value2 = "param"; options.chunkedMode = false; options.params = params; var ft = new FileTransfer(); ft.upload(myImage, "http://app.appyagents.com.au/upload2.php", win, fail, options); } function win(r) { alert("success of the upload"); console.log("Code = " + r.responseCode); console.log("Response = " + r.response); console.log("Sent = " + r.bytesSent); var str=r.response; var n=str.indexOf("image_name="); var n_l=str.indexOf(".png"); if(r.responseCode){ var imgg=str.substr(n+11,n_l+1); var index1=imgg.indexOf("2"); var real_img=imgg.substr(index1,index1+18); window.location="property_step2.php?image_name="+real_img+"&platform=<?php
echo $plat.'&rid='.$rid;?>"; } }
function fail(error) { switch (error.code) { case FileTransferError.FILE_NOT_FOUND_ERR: alert("Photo file not found"); break; case FileTransferError.INVALID_URL_ERR: alert("Bad Photo URL"); break; case FileTransferError.CONNECTION_ERR: alert("Connection error"); break; } } </script>
HTMLコード:
プロパティのメイン画像 * 写真を
キャプチャする
か
、フォト ライブラリから<!--<img style="display:none;width:200;height:150px;" id="smallImage" src="" />--> <form name="myform" action="" method="POST" id="hide_form" > <img style="display:none;width:200;height:150px;" id="smallImage"
src="" />横長モードで画像をキャプチャしてください。 -->
</div>
logcat は次のように述べています。
E/FileTransfer(24735): java.net.ProtocolException: 13 バイトが必要ですが、16384 を受け取りました E/FileTransfer(24735): com.squareup.okhttp.internal.http.HttpTransport$FixedLengthOutputStream.write(HttpTransport.java:226) E /FileTransfer(24735): com.squareup.okhttp.internal.FaultRecoveringOutputStream.write(FaultRecoveringOutputStream.java:60) で E/FileTransfer(24735): org.apache.cordova.FileTransfer$1.run(FileTransfer.java:425) で09-08 08:04:07.953: E/FileTransfer(24735): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 09-08 08:04:07.953: E/FileTransfer(24735): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 09-08 08:04:07.953: E/FileTransfer(24735): java.lang.Thread.run(Thread.java:856) 09 で-08 08:04:07.953: E/ファイル転送 (24735):256 バイト中 243 バイトのアップロードに失敗しました。
メニフェスト :
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="au.com.appyagents" android:versionCode="1" android:versionName="1.0" >
-->
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_VIDEO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application android:debuggable="true" android:allowBackup="true" android:icon="@drawable/icon" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden" android:theme="@style/AppTheme" > <activity android:name="au.com.appyagents.MainApp" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name"> </activity> <activity android:name="au.com.appyagents.Splash" android:label="@string/title_activity_splash" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="au.com.appyagents.MainActivity" android:label="@string/title_activity_main" > </activity> <receiver android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
</application>