So wird’s gemacht: Fortsetzen von Windows Phone-Apps nach dem Aufrufen einer Dateiauswahl (HTML)
[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]
Wenn Sie in einer Windows Phone Store-App eine Dateiauswahl aufrufen, wird Ihre App deaktiviert, bis die Dateiauswahl die Auswahl des Benutzers zurückgibt. Auf Smartphones mit wenig Speicher wird Ihre App allerdings womöglich beendet. Aufgrund dieser Möglichkeit müssen Sie in einer Windows Phone Store-App andere Methoden als in einer Windows Store-App aufrufen, um die App nach Abschluss eines Dateiauswahlvorgangs fortzusetzen. Die folgende Tabelle enthält die entsprechenden Methoden.
Aufgabe | Aufzurufende Methode in einer Windows Store-App | Aufzurufende Methode in einer Windows Phone Store-App |
---|---|---|
Auswählen einer zu öffnenden Datei | PickSingleFileAsync | PickSingleFileAndContinue |
Auswählen eines Speicherorts und eines Dateinamens für eine Datei | PickSaveFileAsync | PickSaveFileAndContinue |
Auswählen eines Ordners | PickSingleFolderAsync | PickFolderAndContinue |
Das Beispiel in diesem Thema veranschaulicht, wie Sie Ihre App bei Verwendung einer FileOpenPicker-Klasse fortsetzen. Andere Methoden für die Datei- oder Ordnerauswahl können mit ähnlichem Code aufgerufen werden.
Tipp Ein Beispiel für diese Lösung finden Sie unter Beispiel zur Dateiauswahl.
Anweisungen
Schritt 1: So können Sie eine FileOpenPicker-Klasse aufrufen und Ihre App fortsetzen
Im folgenden Beispiel wird davon ausgegangen, dass der Benutzer mithilfe von FileOpenPicker ein Foto auswählt.
Rufen Sie die PickSingleFileAndContinue-Methode auf, und wählen Sie ein Foto mithilfe einer Dateiauswahl aus.
function pickSinglePhoto() { // Clean scenario output WinJS.log && WinJS.log("", "sample", "status"); // 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(); }
Schreiben Sie eine Fortsetzungsmethode, um die gewünschte Aktion mit dem vom Benutzer ausgewählten Foto einzuleiten, wenn die App fortgesetzt wird.
// Called when app is activated from file open picker // eventObject contains the returned files picked by user function continueFileOpenPicker(eventObject) { 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"); } }
Lauschen Sie nach dem activated-Ereignis.
... app.addEventListener("activated", activated, false); app.start();
Behandeln Sie nach der Aktivierung der App das activated-Ereignis, um Informationen zur Aktivierung zu sammeln und sie an die Seite weiterzuleiten, die die Dateiauswahl aufgerufen hat.
function activated(eventObject) { var activationKind = eventObject.detail.kind; var activatedEventArgs = eventObject.detail.detail; // Handle launch and continuation activation kinds switch (activationKind) { case activationKinds.launch: case activationKinds.pickFileContinuation: case activationKinds.pickSaveFileContinuation: case activationKinds.pickFolderContinuation: case activationKinds.webAuthenticationBrokerContinuation: var p = WinJS.UI.processAll(). then(function () { // Navigate to either the first scenario or to the last running scenario // before suspension or termination. var url = "/pages/home/home.html"; var initialState = {}; var navHistory = app.sessionState.navigationHistory; if (navHistory) { nav.history = navHistory; url = navHistory.current.location; initialState = navHistory.current.state || initialState; } initialState.activationKind = activationKind; initialState.activatedEventArgs = activatedEventArgs; nav.history.current.initialPlaceholder = true; return nav.navigate(url, initialState); }); ... break; default: break; }
Überprüfen Sie die ActivationKind-Eigenschaft, wenn der Benutzer zur Seite navigiert. Wenn ihr Wert pickFileContinuation ist, rufen Sie die Fortsetzungsmethoden auf.
if (options && options.activationKind === Windows.ApplicationModel.Activation.ActivationKind.pickFileContinuation) { continueFileOpenPicker(options.activatedEventArgs);