2013-08-22 2 views
0

У меня есть построить один Worklight применение в Worklight v6, который использует Cordova API версии 2.6Неправильный результат takePicture метода обратного вызова API Cordova камеры

Я использовал образец представленную в этом месте http://docs.phonegap.com/en/2.6.0/cordova_camera_camera.md.html#Camera

navigator.camera.getPicture(OnSuccess,OnFail, {quality:50,destinationType:Camera.DestinationType.NATIVE_URI,sourceType:Camera.PictureSourceType.CAMERA,saveToPhotoAlbum:true}); 

Даже когда Я использую результат NATIVE_URI. Я получаю в методе OnSuccess файл: // uri вместо содержимого: // uri, как написано в документации.

Camera.DestinationType = { 
DATA_URL : 0,    // Return image as base64 encoded string 
FILE_URI : 1,    // Return image file URI 
NATIVE_URI : 2    // Return image native URI (eg. assets-library:// on iOS or content:// on Android) 

};

Я добавил все необходимые разрешения в манифестный XML-файл.

<uses-permission android:name="android.permission.CAMERA"/> 
    <uses-feature android:name="android.hardware.camera"/> 

увидеть полный код здесь:

<!DOCTYPE HTML> 
<html> 
     <head> 
      <meta charset="UTF-8"> 
      <title>testProject</title> 
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"> 
      <link rel="shortcut icon" href="images/favicon.png"> 
      <link rel="apple-touch-icon" href="images/apple-touch-icon.png"> 
      <link rel="stylesheet" href="css/testProject.css"> 
      <script>window.$ = window.jQuery = WLJQ;</script> 
       <script type="text/javascript" charset="utf-8"> 

    var pictureSource; // picture source 
    var destinationType; // sets the format of returned value 

    // Wait for Cordova to connect with the device 
    // 
    document.addEventListener("deviceready",onDeviceReady,false); 

    // Cordova is ready to be used! 
    // 
    function onDeviceReady() { 
     pictureSource=navigator.camera.PictureSourceType; 
     destinationType=navigator.camera.DestinationType; 
    } 


    // Called when a photo is successfully retrieved 
    // 
    function onPhotoURISuccess(imageURI) { 
     // Uncomment to view the image file URI 
     alert(imageURI); 

     // Get image handle 
     // 
     var largeImage = document.getElementById('largeImage'); 

     // Unhide image elements 
     // 
     largeImage.style.display = 'block'; 

     // Show the captured photo 
     // The inline CSS rules are used to resize the image 
     // 
     largeImage.src = imageURI; 
    } 



    // A button will call this function 
    // 
    function getPhoto(source) { 
     // Retrieve image file location from specified source 
     navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
     destinationType: destinationType.FILE_URI, 
     sourceType: source,saveToPhotoAlbum:true }); 
    } 

    function getPhoto2(source) { 
     // Retrieve image file location from specified source 
     navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
     destinationType: destinationType.NATIVE_URI, 
     sourceType: source,saveToPhotoAlbum:true }); 
    } 
    // Called if something bad happens. 
    // 
    function onFail(message) { 
     alert('Failed because: ' + message); 
    } 

    </script> 

     </head> 
     <body id="content" style="display: none;"> 

     <button onclick="getPhoto(pictureSource.CAMERA);">Camera</button><br> 
     <button onclick="getPhoto2(pictureSource.CAMERA);">From Photo Album</button><br> 
     <img style="display:none;width:60px;height:60px;" id="smallImage" src="" /> 
     <img style="display:none;" id="largeImage" src="" /> 


      <!--application UI goes here--> 
      testProject 
      <script src="js/initOptions.js"></script> 
      <script src="js/testProject.js"></script> 
      <script src="js/messages.js"></script> 
     </body> 
</html> 
+0

Было бы интересно посмотреть полный JavaScript вы написали. –

+0

@IdanAdar смотрите, пожалуйста, весь код в деталях вопроса. –

ответ

0

Я не уверен, что в тот момент, почему Кордова вернется FILE_URI несмотря на установление NATIVE_URI, однако не отметить, что рекомендуется в любом случае использовать FILE_URI:

http://docs.phonegap.com/en/2.6.0/cordova_camera_camera.md.html#camera.getPicture

Примечание: качество изображения сделанных снимков с помощью камеры новее устройства неплохие, а изображения из фотоальбома не будут уменьшены до более низкого качества, даже если задан параметр качества . Кодирование таких изображений с использованием Base64 вызвало проблемы с памятью на многих новых устройствах. Поэтому настоятельно рекомендуется использовать FILE_URI как «Camera.destinationType».


Если вы настаиваете на использовании content:// схемы, может быть, это поможет следующее: Get content uri from file path in android

+0

Я читал об этой заметке на сайте documentaion, но файл: // uri и content: // uri оба являются url, и это не вызовет проблему, упомянутую здесь в моем случае. В моем проекте показать изображение, которое я просто нажав на камеру, мне нужен контент: // uri как файл: // uri даст проблему cros domain. –

+0

Я прошел через ссылку, которую вы вставили, но похоже, что у этого решения есть собственный код. Я просто хочу использовать API-интерфейс cordvoa для получения содержимого: // uri в самом коде js. И согласно документации, он обеспечивает то же самое, когда мы используем NATIVE_URI в параметре параметров. –

Смежные вопросы