gpt4 book ai didi

android - 不同设备上的光传感器

转载 作者:行者123 更新时间:2023-11-29 01:49:38 24 4
gpt4 key购买 nike

我试图创建一个通过光传感器计算光的小应用程序,但不同的设备给我完全不同的值。我使用最大值来计算百分比,但我的 xperia 和我的三星在同一个地方(靠近我家外面的墙,在屋顶下),第一个设备给了我 90% (90k/102k),第二个给我 12% (8k/64k)。有没有办法避免这个问题?

    public final void onSensorChanged(SensorEvent event) 
{
if( event.sensor.getType() == Sensor.TYPE_LIGHT)
{
currentLux=(int) event.values[0];
float perc=(currentLux*100)/max;
lightTextBox.setText(lightTextBox.getText()+String.valueOf(perc)+" * ");
}
}

最佳答案

由于每个传感器对于相同的光照水平都有不同的值,所以我所做的是记录在应用程序生命周期中将捕获的最小值最大值值,并且我将这些值存储为 MinMax,在使用该应用程序几天后,所有设备都将具有我可以信赖的几乎相同的值。作为初始状态,我认为最小值为 1000,最大值为 0。 (我将其存储在 SharedPreferences 中)。然后我将通过考虑传感器的当前 Lux 值来更新这些值。然后我将计算光照的百分比。这是我写的代码:

float luxValue = o.getAsFloat("double_light_lux");

//here I update the value in sharedPreferences
updateMaxAndMinValue(context, luxValue);

float percentageValue = scale(LightMetadata.getMinValue(context),
LightMetadata.getMaxValue(context),
0,
100,
luxValue);

更新函数:

public static void updateMaxAndMinValue(Context context, float luxValue) {
float currentMax = LightMetadata.getMaxValue(context); //0 as init.
float currentMin = LightMetadata.getMinValue(context); //1000 as init.

if (luxValue > currentMax)
LightMetadata.setMaxValue(context, luxValue);
if (luxValue < currentMin)
LightMetadata.setMinValue(context, luxValue);
}

然后我通过将值从 min -> max 缩放到 0 -> 100 来计算百分比这是函数:

/**
* @param min old min value
* @param max old max value
* @param a new min value
* @param b new max value
* @param value the value that want to scale
* @return new scaled value
*/
public static float scale(float min, float max, float a, float b, float value) {

// (b-a)(x - min)
//f(x) = -------------- + a
// max - min

float scaled;
float numerator = (b - a) * (value - min);
float denominator = max - min;

scaled = (numerator / denominator) + a;
return scaled;
}

关于android - 不同设备上的光传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com