共用方式為


快速入門:使用自動播放取得相機的影像 (HTML)

[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]

這個教學課程說明如何在插入存放裝置後,藉由處理自動播放事件來存取卸除式存放裝置。

目標: 您將了解如何藉由處理應用程式的自動播放啟用事件,來存取卸除式存放裝置。

先決條件

您應該熟悉 JavaScript 和 HTML。

您必須具備可以插入電腦的相機或相機記憶體裝置,才能觸發自動播放事件。裝置應包含一些影像檔,因為這個應用程式會尋找裝置上的第一張相片,並加以顯示。

完成所需的時間: 20 分鐘.

指示

1. 開啟 Microsoft Visual Studio

開啟 Visual Studio 的執行個體。

2. 建立新專案

在 [新增專案] 對話方塊中,從 JavaScript 專案類型中選擇 [空白的應用程式]。

3. 宣告卸除式存放裝置功能

按兩下方案總管中的 package.appxmanifest。選取 [功能] 索引標籤。選取 [功能]**** 清單中的 [卸除式存放裝置]。

4. 宣告檔案類型

  1. 在 [宣告] 索引標籤中,從 [可用宣告]**** 選擇 [檔案類型關聯],然後按一下 [加入]****。
  2. 在 [屬性] 下,將名稱屬性設定成 image
  3. 在 [支援的檔案類型] 方塊中的 [FileType] 欄位中輸入 .gif,讓 .gif 成為支援的檔案類型。
  4. 再新增兩個支援的檔案類型 .jpg 和 .png,按一下 [加入新的],然後填入 FileType。

5. 宣告自動播放內容協定

  1. 在 [宣告] 索引標籤中,從 [可用宣告]**** 選擇 [自動播放內容],然後按一下 [加入]****。
  2. 在 [屬性] 下,將 [ContentEvent]**** 屬性設定為 CameraMemoryOnArrival、將 [Verb] 屬性設定為 storageDevice,然後將 [ActionDisplayName] 屬性設定為易記名稱,以便在自動播放啟用中啟動您的應用程式時顯示該名稱。

6. 宣告自動播放裝置協定

  1. 在 [宣告] 索引標籤中,從 [可用宣告]**** 選擇 [自動播放裝置],然後按一下 [加入]****。
  2. 在 [屬性] 下,將 [DeviceEvent]**** 屬性設定為 WPD\ImageSource、將 [Verb] 屬性設定為 wpdImage,然後將 [ActionDisplayName] 屬性設定為易記名稱,以便在自動播放啟用中啟動您的應用程式時顯示該名稱。

7. 插入 HTML 和 JavaScript

開啟 Default.html,然後將以下的程式碼複製到這個檔案中,取代原來的內容。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Using Autoplay</title>

    <link rel="stylesheet" href="/winjs/css/ui-dark.css" />
<script type="text/javascript">

    document.addEventListener("DOMContentLoaded", initialize, false);

    // Add a handler for the activated event so it can 
    // do something when activated via AutoPlay.
    Windows.UI.WebUI.WebUIApplication.addEventListener(
        "activated", activatedHandler);

function activatedHandler(eventArgs) {
    if (eventArgs.kind === 
            Windows.ApplicationModel.Activation.ActivationKind.file) {
        // clear any device id so we always use
        //  the latest connected device
        g_autoPlayDeviceId = null; 
        g_autoPlayDrive = eventArgs.files[0];
        document.getElementById("btn").click();
        getFirstImageOnAutoPlayStorage();
    } else if (eventArgs.kind === 
            Windows.ApplicationModel.Activation.ActivationKind.device) {
        // clear any saved drive so we always use 
        // the latest connected device
        g_autoPlayDrive = null;
        g_autoPlayDeviceId = eventArgs.deviceInformationId;
        document.getElementById("btn").click();
        getFirstImageOnAutoPlayStorage();
    } else {
        document.getElementById("status").innerHTML =
            "Not activated using Autoplay";
        document.getElementById("btn").disabled = true;
    }
}

    function initialize() {
        document.getElementById("btn").addEventListener(
           "click", getFirstImageOnAutoPlayStorage, false);
    }

function getFirstImageOnAutoPlayStorage() {

    document.getElementById("output").innerHTML = "";
    if (g_autoPlayDrive) {

        document.getElementById("status").innerHTML =
            "Activated using Drive Autoplay";

        // Drive Autoplay returns a Windows.Storage.StorageFolder 
        // representing the storage drive
        // Construct the query for image files on the device
        var queryOptions = new Windows.Storage.Search.QueryOptions(
            Windows.Storage.Search.CommonFileQuery.orderByName,
            [".jpg", ".png", ".gif"]);
        var imageFileQuery =
            g_autoPlayDrive.createFileQueryWithOptions(queryOptions);
         // Run the query for image files
        imageFileQuery.getFilesAsync().
            then(
                function (items) {
                displayFirstImage(items);
            },
                function (e) {
            document.getElementById("output").innerHTML = 
                "Error when looking for images in '" +
                g_autoPlayDrive.name + "': " + e.message;
            });

        } else if (g_autoPlayDeviceId) {

        document.getElementById("output").innerHTML =
            "Activated using Device Autoplay";

        // Device Autoplay returns a device ID. We take an extra step to
        // convert that identifier into a Windows.Storage.StorageFolder.
        var autoplayStorageDevice;
        try {
            autoplayStorageDevice =
            Windows.Devices.Portable.StorageDevice.fromId(g_autoPlayDeviceId);
        } catch (e) {
            document.getElementById("output").innerHTML =
            e.message;
        } 
         // Construct the query for image files on the device
        var queryOptions = new Windows.Storage.Search.QueryOptions(
            Windows.Storage.Search.CommonFileQuery.orderByName,
            [".jpg", ".png", ".gif"]);
        var imageFileQuery =
            autoplayStorageDevice.createFileQueryWithOptions(queryOptions);
        imageFileQuery.getFilesAsync().
            then(
                function (items) {
            displayFirstImage(items);
        },
                function (e) {
            document.getElementById("output").innerHTML = 
                    "Error when looking for images in '" +
                    autoplayStorageDevice.name + "': " + e.message;
        });
    } else {
        document.getElementById("output").innerHTML =
            "Not activated via AutoPlay.";
    }
}

    function displayImage(imageFile) {
        document.getElementById("imageNameHolder").innerHTML =
               "Image file name: " + imageFile.name + "<br/>";

        // Setting 2nd parameter to 'false' cleans up the URL
        // after first use. We set this because we only need 
        // to load the URL into the image tag once.
        document.getElementById("imageHolder").src =
                window.URL.createObjectURL(imageFile, false);
    }

function displayFirstImage(items) {
    var found = false;
    for (var i = 0, l = items.length; i < l && !found; i++) {
        if (items[i].size > 0) { // display the first non-empty file
            displayImage(items[i]);
            found = true;
        }
    }

    if (!found) {
        // No files found matching our criteria
        document.getElementById("output").innerHTML =
            "No image files found on the removable storage";
    }
}
</script>

</head>
<body>
    <div id="imageNameHolder"></div>
    <img id="imageHolder" alt="image holder" src="" width="256"/><br />
    <div id="output"></div>
    <div id="status"></div>
    <button class="action" id="btn">Get Image File</button>
</body>
</html>

8. 測試應用程式

  1. 在 [建置]**** 功能表中按一下 [建置方案],即可建置方案。
  2. 在 [建置]**** 功能表中按一下 [部署方案],即可部署方案。
  3. 您的應用程式現在應該已登錄為自動播放處理常式。插入包含一些影像檔的相機或相機記憶體。偵測到裝置時,選擇讓您的應用程式開啟。您的應用程式應該會顯示裝置的第一個影像。

注意  如果您收到錯誤,請檢查下列項目:

  • 藉由在 [方案總管] 中開啟 package.appxmanifest 並檢查 [功能] 索引標籤中的 [卸除式存放裝置]****,來確定已啟用存取卸除式存放裝置。

 

摘要

您已登錄自動播放處理常式,當您插入含有儲存體或相機記憶體的相機時,將會啟動該處理常式。

相關主題

如何登錄自動播放應用程式

在 Windows Phone 應用程式中存取 SD 記憶卡