私はWindows Phoneの開発に不慣れで、phonegap/cordovaを使用してアプリを移植する必要があります。私のコードのほとんどは Android/iOS と winphone で動作しますが、この FileOpenPicker ではブロックされています。私は winjs 2.1 を使用しています。この機能が必要なページにいるときに呼び出されるスクリプトを準備したいと思います。
私はたくさんの例を読みましたが、解決策にかなり近づいていると思います。
私のhtmlファイルでは、次のように宣言しています。
<script src="//Microsoft.Phone.WinJS.2.1/js/base.js"></script>
<script src="//Microsoft.Phone.WinJS.2.1/js/ui.js"></script>
<script type="text/javascript" src="js/default.js"></script>
これは、FileOpenPicker を呼び出す必要があるページで使用するファイル、default.js です。
(function () {
"use strict";
var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
app.onloaded = function (args) {
var activationKind = args.detail.kind;
document.getElementById("btnSnap").addEventListener("click", pickSinglePhoto);
if (activationKind === Windows.ApplicationModel.Activation.ActivationKind.pickFileContinuation) {
continueFileOpenPicker(options.activatedEventArgs);
}
};
function pickSinglePhoto() {
// Clean scenario output
WinJS.log && WinJS.log("", "sample", "status");
console.log("in pickSinglePhoto");
// Create the picker object and set options
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.picturesLibrary;
// Users expect to have a filtered view of their folders depending on the scenario.
// For example, when choosing a documents folder, restrict the filetypes to documents for your application.
openPicker.fileTypeFilter.replaceAll([".png", ".jpg", ".jpeg"]);
// Open the picker for the user to pick a file
openPicker.pickSingleFileAndContinue();
}
// Called when app is activated from file open picker
// eventObject contains the returned files picked by user
function continueFileOpenPicker(eventObject) {
console.log("in continueFileOpenPicker");
var files = eventObject[0].files;
var filePicked = files.size > 0 ? files[0] : null;
if (filePicked !== null) {
// Application now has read/write access to the picked file
WinJS.log && WinJS.log("Picked photo: " + filePicked.name, "sample", "status");
} else {
// The picker was dismissed with no selected file
WinJS.log && WinJS.log("Operation cancelled.", "sample", "status");
}
}
app.start();
})();
残念ながら、これは機能しません。フラグactivationKindが常に未定義であるため、continueFileOpenPickerに入ることができません。app.onloaded の代わりに app.onactivated を使用する必要があると確信していますが、前者の場合、関数に入ることができません。
私はすでに関数 pickSinglePhoto を試してみましたが、うまくいくようですが、アプリがクラッシュするため、選択後にページに戻ることができません.
どんな手掛かり?