2015-05-28 152 views
1

我在使用FirefoxOS中的Camera API時遇到了一些問題。我試圖拍這樣的照片:使用FirefoxOS Camera API拍攝照片

var options = { 
    mode: 'picture', 
    recorderProfile: 'jpg', 
    previewSize: { 
     width: 352, 
     height: 288 
    } 
}; 
function successCamera(newCamera) { 
    console.log("Succeeded loading camera"); 
    function successPicture(pictureBlob){ 
     console.log("Took picture"); 
    } 
    function errorPicture(error) { console.log("Issue taking picture " + error); } 
    var picture = newCamera.takePicture(options, successPicture, errorPicture); 
} 
function errorCamera(error) { 
    console.log("Error loading camera. " + error); 
    console.warn(error); 
} 
navigator.mozCameras.getCamera("back", options, successCamera, errorCamera); 

它提供了一個錯誤,名爲:HardwareClosed。 我找不到這個錯誤,所以我只想在這裏查看StackOverflow,看看有沒有人遇到過問題/知道問題在這裏。

感謝您的幫助!

+0

我想你應該把navi gator.mozCameras.getCamera(「back」,options,successCamera,errorCamera);'在你定義'successCamera'和'errorCamera'後猜測。 – Noitidart

+0

對不起,粘貼錯了。然而,這不是問題。 –

+0

1版本的FirefoxOS版本。4以下的相機僅限於特權應用程序。它使用與MDN上的API不同的api(您必須瀏覽存檔) –

回答

2

HardwareClosed(映射到內部NS_ERROR_NOT_INITIALIZED)可以通過雙方對getCamera和takePicture返回呼叫。

如果是getCamera調用失敗,很可能是因爲相機已經打開(在此應用程序或其他應用程序中),並且需要先釋放它。在Firefox OS的未來版本中,這將由https://bugzilla.mozilla.org/show_bug.cgi?id=1073017修復,以便新應用程序可以從舊的「取」相機。

如果是takePicture調用失敗(可能不是您的情況),這是因爲在調用takePicture之前攝像頭已經釋放。那會是你叫釋放或者一些驅動錯誤迫使相機關閉。

其他一些(無關)建議:

請注意recorderProfile無效。這樣的事情會更合適:

var options = { 
    mode: 'picture', 
    recorderProfile: 'high', 
    previewSize: { 
     width: 352, 
     height: 288 
    } 
}; 

火狐OS的更高版本(最新的2.2,主)驗證recorderProfile,如果你提供的「JPG」將拒絕該配置。

在更高版本的相機API中刪除了回調語法,並切換到承諾和事件。如果您能夠將您的2.2版本升級到最新的(東西從今年),它會自動選擇最適合你的配置,即:

navigator.mozCameras.getCamera("back").then(successCamera, errorCamera); 

會選擇最匹配的預覽大小的窗口大小和最高長寬比匹配圖片大小與可用的所選預覽大小。這與股票相機應用程序的工作方式相同。

takePicture和getCamera的使用不同的選項(有些重疊),但因爲你沒有使用任何他們對takePicture,空應該足夠了:

var picture = newCamera.takePicture().then(successPicture, errorPicture); 

var picture = newCamera.takePicture(null, successPicture, errorPicture); 

如果你想支持承諾和回調API版本,你可以做一個像這個應用程序來檢查Firefox操作系統版本的技巧:https://github.com/texthtml/torch/blob/master/src/index.js#L69

+0

感謝您的幫助! –

1

如果它沒有從相機中的照片直接,你可以使用一個Pick活動:

var pick = new MozActivity({ 
    name: "pick", 
    data: {type: ["image/*"]} 
}); 
pick.onsuccess = function() { 
    console.log('import pick success', this.result.type, this.result.blob); 
    app.importImageFile(this.result.blob); 
}; 
pick.onerror = function() { 
    var userMsg; 
    console.error('import pick error', this.error); 
    switch (this.error.name) { 
     case 'ActivityCanceled': 
      return; 
     case 'NO_PROVIDER': 
      userMsg = $L('No external sources for images.'); 
      break; 
     default: 
      userMsg = this.error.message || this.error.name || this.error.toString(); 
    } 
    enyo.Signals.send('onShowMessage', {message: userMsg }); 
}; 
+0

感謝您的幫助!不幸的是,它必須是直接從相機拍攝的照片。不過,我會保留這個例子供以後使用! –