1

使用接近传感器类时,我遇到了这个问题。最近,我从事接近传感器(P-Sensor)软件开发。我从谷歌找到了一些相关参考,例如接近传感器类(网站:msdn.microsoft.com/en-us/library/windows/apps/windows.devices.sensors.proximitysensor.aspx)和示例代码(网站:github.com /Microsoft/Windows-universal-samples/tree/master/Samples/ProximitySensor/cpp)。我试图模仿示例代码,但没有成功。

据我所知,首先需要创建运行时 api 接口。以下代码是我如何创建接口 IProximitySensorStatics 并且它成功了。输出打印“0”。接口 IProximitySensorStatics 必须在使用前通过 api GetActivationFactory() 激活。

ComPtr<IProximitySensorStatics> stProximitySensorStatics;
HRESULT hr = GetActivationFactory(HStringReference(RuntimeClass_Windows_Devices_Sensors_ProximitySensor).Get(), &stProximitySensorStatics);
printf("CProximitySensorCtrl::GetActivationFactory stProximitySensorStatics hr = %x", hr);
if (FAILED(hr))
{
    printf("GetActivationFactory stProximitySensorStatics failed");
    return FALSE;
} 

下一步是创建接口 IProximitySensor,因为我要应用的运行时 API 是 GetCurrentReading(),它是 IProximitySensor 的成员。然后我使用上面相同的方法。输出打印“GetActivationFactory stProximitySensor failed”。HRESULT 值为 80004002。

如果我将 HStringReference(RuntimeClass_Windows_Devices_Sensors_ProximitySensor) 更改为 HStringReference(RuntimeClass_Windows_Devices_Sensors_ProximitySensorReading),HRESULT 值为 80040154。我不知道如何解决。HRESULT 值列表:https ://msdn.microsoft.com/en-us/library/cc704587.aspx

ComPtr<IProximitySensor> stProximitySensor;
hr = GetActivationFactory(HStringReference(RuntimeClass_Windows_Devices_Sensors_ProximitySensor).Get(), &stProximitySensor);
printf("CProximitySensorCtrl::GetActivationFactory stProximitySensor hr = %x", hr);
if (FAILED(hr))
{
    printf("GetActivationFactory stProximitySensor failed");
    return FALSE;
} 

现在的问题是我想知道如何激活接口 IProximitySensor 甚至 IProximitySensorReading。IProximitySensorReading 是另一个接口,用于捕获 GetCurrentReading() 的输出。

如果 GetCurrentReading() 成功获取值,则一切都完成了。在其他传感器类中,例如 Accelerometer、Compass、LightSensor 等,总是有一个 GetDefault() 方法。GetDefault() 可能会解决我的问题,但 ProximitySensor 类没有此方法。

以下代码是我尝试使用 ProximitySensor 类中的方法以使其工作。hr 打印“0”,但输出“stProximitySensor”为 NULL。

HSTRING m_hsString;
hr = stProximitySensorStatics->GetDeviceSelector(&m_hsString);

hr = stProximitySensorStatics->FromId(m_hsString, &stProximitySensor); 
printf("FromId hr = %x", hr); 
if (FAILED(hr))
{
    printf("FromId failed");
    return FALSE;
}
if (stProximitySensor == NULL)
{
    printf("FromId stProximitySensor = null failed");
    return FALSE;
}

提前完全感谢。

4

0 回答 0