我希望创建一个Android应用程序,它将充当"暖手"。我正在使用GPS呼叫,振动,手电筒,我也使用多个线程在循环中运行代码。电池消耗很高但还不够。
当我使用这个应用程序时,需要大约10分钟才能从25度到33度。我的目标是在最短的时间内达到40度。
那么,如何通过C#代码读取器件温度,以及如何达到40度的热量并保持在那里?
答案 0 :(得分:6)
你不需要手电筒或振动器这样做,因为应用程序会让大多数人烦恼,因为这两个人即使在不需要的时候也会打开。
使用不应影响用户身体但能够产生热量的技术。
如何通过C#代码
读取设备温度
在您阅读传感器之前,首先需要检查设备是否有温度计传感器。至于使用C#从Android读取传感器,您必须使用Java代码编写,然后从C#调用该函数。
您可以使用已制作的Unity-Android-Sensor-Plugin插件。
private AndroidJavaObject plugin;
void Start ()
{
#if UNITY_ANDROID
plugin = new AndroidJavaClass("jp.kshoji.unity.sensor.UnitySensorPlugin").CallStatic<AndroidJavaObject>("getInstance");
//Init the ambienttemperature sensor
if (plugin != null)
{
plugin.Call("startSensorListening", "ambienttemperature");
}
#endif
}
稍后在更新功能中读取环境温度传感器:
float[] sensorValue = plugin.Call<float[]>("getSensorValues", "ambienttemperature");
电池消耗量很高但还不够。
这些是用于加热移动设备的技术。
亮度:
1 。将亮度更改为最高值。现在,禁用自动调暗,以便屏幕指示灯始终亮起。
网络:
2 。创建多个(4到5个)TCP服务器,每个服务器都在自己的线程中运行,并且还有设备上的不同端口。
现在,创建相同数量的TCP客户端,并使用端口和IPAddress.Loopback
作为IP连接到服务器。
在while循环中,随机生成约 13k 浮点数,将其转换为字节数组,然后将其连续发送到每个客户端和服务器。当你收到它时,将该字节数组转换回float,然后对结果一无所知。重复并冲洗。
音频:
3 。将 5 或 6 音频文件载入音频文件,将其设置为循环,然后将音量设置为{{1} }。播放所有音频。
视频:
4 。加载 5 或 6 动画,将其设置为循环然后播放。它可能在屏幕上看不到,但只要它正在播放,它就可以了。
视频:
5 。使用Unity的新VidepPlayer加载 3 视频,禁用音频,将视频连接到RawImage。将其他RawImage的alpha设置为0
,以使其不可见。播放视频并让解码完成工作。
Senors :
6 。启用加速度计和陀螺仪传感器在更新功能的每一帧轮询它。
7 。启用GPS并在更新功能的每一帧读取轮询。
8 。启用蓝牙并每秒连续搜索其他设备。
9 。启用前后摄像头,从中拉出纹理,但不做任何操作。
如何达到40度的热量并留在那里?
将它们放在一起:
将上述所有内容放在函数或其自己的类中。
1 。使用名为level的0
变量编写一个简单的类。应该使用此级别变量来确定应该运行上述哪些操作。
2 。当应用启动时,将级别更改为int
,然后启用/启动上述每种技术。如果温度达到 38 附近,则将水平降低到 5 。当水平降低时,你停止运行任何东西,所以在这种情况下,你应该停止轮询加速度计,陀螺仪,GPS,蓝牙和摄像头,然后禁用它们。
3 。如果温度高于 40 ,请降低水平。如果低于 40 ,请增加级别。这就是你将温度保持在9
度左右的方法。
4 。更好的是,您可能需要制作自己的PID controller,使用上述技术。要做到这一点需要时间,但这可能是解决这个问题的最好方法。
提示强>:
对于您执行的每项操作,请检查帧速率。如果帧速率低于 6 ,请停止。如果不这样做,Android可能会因为没有响应而终止该应用。
注意强>:
编写一个简单的函数,用于检测comment部分中提到的某些设备。确保此应用不会在这些应用上运行,或者您的“暖手器”应用可能会成为“暖手器&amp;&amp;&amp; amputator ”应用。