2012-06-25 88 views
0

我正在使用PhoneGap相機API拍攝照片。拍完照片後,它會顯示在我的頁面中。它可以工作,但圖片保存在應用程序緩存文件夾中,在phonegap應用程序中保存SD卡中的相機拍攝的圖片

/mnt/sdcard/Android/data/mypackage.com/cache

相反,我想將它們保存在我的SD卡,/mnt/sdcard/myFolder或類似的文件夾中。我經歷了很多Q & A,但我找不到我想要的方式。

這是我的源代碼。

<html> 
    <div data-role="page" id="camera_page" data-theme="a"> 
     <div data-role="header"><h1>Camera-page</h1></div> 
     <div data-role="content" class="ui-content"> 
     <div data-role="fieldcontain"> 
     <button onclick="capturePhotoWithData();" data-theme="a">Capture Photo</button> <br> 

      <img style="display:none;width:60px;height:60px;" id="smallImage" src="" /> 
      <img style="display:none;" id="largeImage" src="" /> 
     </div> 

    </div> 
    <div data-role="footer" data-position="fixed">footer</div> 
</div> 

</html> 

//here is my java script 

    <script type="text/javascript"> 

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

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

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

// Called when a photo is successfully retrieved 
// 
function onPhotoDataSuccess(imageData) { 
    // Get image handle 
    // 
    var smallImage = document.getElementById('smallImage'); 

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

    // Show the captured photo 
    // The inline CSS rules are used to resize the image 
    // 
    smallImage.src = "data:image/jpeg;base64," + imageData; 
} 

// Called when a photo is successfully retrieved 
// 
function onPhotoFileSuccess(imageData) { 
    // Get image handle 
    console.log(JSON.stringify(imageData)); 

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

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

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

// Called when a photo is successfully retrieved 
// 
function onPhotoURISuccess(imageURI) { 
    // Uncomment to view the image file URI 
    // console.log(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 capturePhotoWithData() { 
    // Take picture using device camera and retrieve image as base64-encoded string 
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 }); 
} 

function capturePhotoWithFile() { 
    navigator.camera.getPicture(onPhotoFileSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.FILE_URI }); 
} 

// 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 }); 
} 

// Called if something bad happens. 
// 
function onFail(message) { 
    alert("you didn't take any pictures"); 
} 

+0

你解決了嗎?如果是,那麼我可以知道如何? – surhidamatya

回答

0

使用的OnActivityResult方法檢查正確的結果ID,

String out = "/mnt/sdcard/myFolder/mypic.png"; 
Bitmap b = i.getExtras().getData("data"); 

//Create an OutputStream, can't remember how I did it. this.getOutputStream() maybe? 

Bitmap.compress(Bitmap.CompressFormat.valueOf(out), 100, outputStream); 

我在工作中的一個項目做到了這一點,我也許能夠準確地更新你明天如何。

+0

謝謝你的回覆。我會嘗試這一個。當你完成時更新我。 –

1

你必須將你的文件複製到你想要存儲的目的地。

我所做的,就是:

  • 收到了fileURI從camera.getPictures功能

navigator.camera.getPicture(
 
     onSuccess, 
 
     onFail, { 
 
      quality: 50, destinationType: Camera.DestinationType.FILE_URI //FILE_URI! 
 
     }); 
 

 
     function onSuccess(imageURI) { 
 
     alert(imageURI); //displays the current location of the file 
 
     $scope.imageURI = imageURI; 
 
     }

  • 移動從源文件夾中的文件(根據fileUri)到目的地:

moveFile($scope.imageURI); 
 

 
     function moveFile(fileUri) { 
 
      window.resolveLocalFileSystemURL(
 
      fileUri, 
 
      function(fileEntry){ 
 
       window.resolveLocalFileSystemURL(
 
       cordova.file.externalCacheDirectory, //insert your destination here 
 
       function(dirEntry) { 
 
        // move the file to a new directory and rename it 
 
        fileEntry.moveTo(dirEntry, fileEntry.name, onSuccess(fileEntry, dirEntry), onFail); 
 
       }, 
 
       onFail); 
 
      }, 
 
      onFail); 
 
     }

(得到這個大多來自Cordova Move File using the file url

你的目標文件夾應該是cordova.file.externalRootDirectory(根據https://github.com/apache/cordova-plugin-file)。

相關問題