1

Proximity Sensor クラスを使用しているときに問題が発生しました。最近は、近接センサー(P-Sensor)のソフトウェア開発に携わっています。Proximity Sensor クラス (Web サイト: msdn.microsoft.com/en-us/library/windows/apps/windows.devices.sensors.proximitysensor.aspx) やサンプル コード (Web サイト: github.com) など、Google からの相対的な参照を見つけました。 /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 が IProximitySensor のメンバーである GetCurrentReading() であるためです。次に、上記と同じ方法を使用します。出力には、「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