我在Windows Phone 8.1上使用Microsoft Band开发。试图弄清楚他是否具备紫外线传感器的全部功能。我找到了一些找到紫外线水平的例子。它们表明可以使用枚举:
namespace Microsoft.Band.Sensors
{
public enum UVIndexLevel
{
None = 0,
Low = 1,
Medium = 2,
High = 3,
VeryHigh = 4,
}
}
还想知道这些枚举的规模是多少。据我所知,有0到11级以上的UI。这些枚举的范围是什么?
我基本上使用代码行:
{
bandClient.SensorManager.UV.ReadingChanged += Ultraviolet_ReadingChanged;
await bandClient.SensorManager.UV.StartReadingsAsync();
*Later on code*
await bandClient.SensorManager.UV.StopReadingsAsync();
bandClient.SensorManager.UV.ReadingChanged -= Ultraviolet_ReadingChanged;
}
异步方法:
async void Ultraviolet_ReadingChanged(object sender, BandSensorReadingEventArgs<IBandUVReading> e)
{
IBandUVReading ultra = e.SensorReading;
UVIndexLevel potatoUV = ultra.IndexLevel;
}
但出于某种原因,我大部分时间都没有得到索引。在阳光直射下,我有时会获得大约800万到1000万(或数千)的读数。值在“int”中(虽然有时会给出枚举)。 我感兴趣的是,我如何衡量它。还有,紫外线究竟在读什么?我知道有很多种紫外线照射。但是我该如何使用这些数据呢? 如果它是一个范围,那么也许我可以放置一个范围值,但我需要以某种方式对其进行采样,它具有哪些UV索引并将该信息提供给用户。并在以后的计算中使用索引。
同时... 我碰巧遇到了一个bug。在测试紫外线时,当我站在直射光线下时,读数没有显示出来。只有当我移动到另一个紫外线水平时,它才会改变(但永远不会回到第一个)。但似乎第一个读数要么没有改变(因为方法是“readchanged”)或者是默认位置。无论多么有意义。有没有办法在按钮点击时调出阅读?
如果需要,我可以搜索我使用的示例,以获取代码的模式深度。但大部分都在这里。
答案 0 :(得分:0)
此传感器与其他传感器略有不同。它确实需要用户执行操作以获取数据,然后可以收集数据。 这是一个代码,用于处理带有Band的WP8.1。
DateTime start;
private async void Button_Click(object sender, RoutedEventArgs e)
{
try
{
this.viewModel.StatusMessage = "Connecting to Band";
// Get the list of Microsoft Bands paired to the phone.
IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();
if (pairedBands.Length < 1)
{
this.viewModel.StatusMessage = "This sample app requires a Microsoft Band paired to your phone. Also make sure that you have the latest firmware installed on your Band, as provided by the latest Microsoft Health app.";
return;
}
// Connect to Microsoft Band.
using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
{
start = DateTime.Now;
this.viewModel.StatusMessage = "Reading ultraviolet sensor";
// Subscribe to Ultraviolet data.
bandClient.SensorManager.UV.ReadingChanged += UV_ReadingChanged;
await bandClient.SensorManager.UV.StartReadingsAsync();
// Receive Accelerometer data for a while.
await Task.Delay(TimeSpan.FromMinutes(5));
await bandClient.SensorManager.UV.StopReadingsAsync();
bandClient.SensorManager.UV.ReadingChanged -= UV_ReadingChanged;
}
this.viewModel.StatusMessage = "Done";
}
catch (Exception ex)
{
this.viewModel.StatusMessage = ex.ToString();
}
}
void UV_ReadingChanged(object sender, Microsoft.Band.Sensors.BandSensorReadingEventArgs<Microsoft.Band.Sensors.IBandUVReading> e)
{
var span = (DateTime.Now - start).TotalSeconds;
IBandUVReading ultra = e.SensorReading;
string text = string.Format("Ultraviolet = {0}\nTime Stamp = {1}\nTime Span = {2}\n", ultra.IndexLevel, ultra.Timestamp, span);
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { this.viewModel.StatusMessage = text; }).AsTask();
start = DateTime.Now;
}