Windows 7 感應器與定位平台讓應用程式能感知物理環境並自我調適。環境光線感應器可讓螢幕在陽光下自動提高亮度/對比度、在暗室降低刺眼度;定位 API 統一 GPS、Wi-Fi、基地台定位,免除協議解析負擔。平台特色:硬體獨立(統一 API)、隱私優先(預設關閉、使用者授權)、多應用共享、定位簡單化。
修改 MFC 應用程式 AmbientLightAware,整合環境光線感應器,根據平均照度 (lux) 自動調整範例文字字體大小,實現「可調式閱讀器」效果。
感應器 API 核心為 ISensorManager,提供感應器枚舉、事件訂閱、權限請求。兩大事件接收類別:
OnSensorEnter 新感應器上線),內含 Initialize/Uninitialize/AddSensor/RemoveSensorOnDataUpdated、OnStateChanged、OnLeave),維護 m_mapLux 記錄各感應器最新照度值sensorsapi.libStdAfx.h 包含 <Sensors.h>、<SensorAPI.h>Initialize)CoCreateInstance 建立 ISensorManagerSetEventSink 訂閱 OnSensorEnterGetSensorsByType(SENSOR_TYPE_AMBIENT_LIGHT) 列舉現有光線感應器RequestPermissions 彈出使用者授權對話框(僅首次顯示)AddSensor 並請求初始資料報告AddSensor)ISensor::SetEventSink 註冊 CAmbientLightAwareSensorEvents 實例m_Sensors 對應表SENSOR_STATE_READY 時請求資料報告、更新 UIISensorDataReport,提取 SENSOR_DATA_TYPE_LIGHT_LEVEL_LUX (PROPVARIANT),更新 m_mapLux,呼叫 UpdateLux 計算平均值並刷新 UIm_mapLux、更新平均值S_OK// GetSensorData 中
PROPVARIANT var; PropVariantInit(&var);
pDataReport->GetSensorValue(SENSOR_DATA_TYPE_LIGHT_LEVEL_LUX, &var);
// var.vt == VT_R4, var.fltVal 即為 lux 值
m_mapLux[sensorID] = var.fltVal;
PropVariantClear(&var);
UpdateLux(); // 計算所有感應器平均值
CAmbientLightAwareDlg::UpdateLux)IDC_STATIC_SAMPLEInvalidateRect)InitInstance:CoInitializeEx、建立對話框、呼叫 InitAmbientLightAwareOnInitDialog 呼叫初始化OnPaint 繪製範例文字CleanUp 呼叫 Uninitialize、CoUninitialize手電筒照射/遮蔽感應器,觀察範例文字在高照度下放大、低照度下縮小,模擬真實閱讀器自適應行為。
本實驗完整示範 Windows 7 感應器平台整合流程:權限模型、感應器枚舉、事件驅動資料處理、PROPVARIANT 資料提取、多感應器資料融合與 UI 回應。掌握此模式,可輕鬆擴充至加速計、GPS、人體偵測等多元感應器應用。