gpt4 book ai didi

java - 检测口袋中的设备是否存在

转载 作者:行者123 更新时间:2023-12-02 02:20:54 24 4
gpt4 key购买 nike

我的应用程序需要根据针对个人设置的一些参数来了解手机是在口袋里还是在手中,而不是继续执行下一个任务。

我读过各种博客,还SensorManager android developer 但没有人帮助我。我在堆栈上找到的唯一相关链接是 this没有解决方案,尽管对该问题的一条评论建议使用Awareness API。我正在经历它,我的理解是用户 Activity 是找到这个的上下文 - 我可能是错的。也许有人在这方面工作或正在进行研发,请分享您的观察结果,这可能会以某种方式帮助我走得更远。

有什么办法可以知道手机是否在口袋里?如果是的话,有人可以告诉我如何做到这一点吗?

任何有关概念的指导/链接都会有帮助。

谢谢。

最佳答案

我在我的项目中实现了这个。我从光传感器、加速度计和接近传感器获得了读数。请记住,它大约可以检测口袋中的设备是否存在。

从传感器(加速计、接近传感器和光传感器)获取当前参数:

@Override
public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
g = new float[3];
g = event.values.clone();

double norm_Of_g = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2]);

g[0] = (float)(g[0] / norm_Of_g);
g[1] = (float)(g[1] / norm_Of_g);
g[2] = (float)(g[2] / norm_Of_g);

inclination = (int) Math.round(Math.toDegrees(Math.acos(g[2])));
accReading.setText("XYZ: " + round(g[0]) + ", " + round(g[1]) + ", " + round(g[2]) + " inc: " + inclination);
}
if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
proximityReading.setText("Proximity Sensor Reading:" + String.valueOf(event.values[0]));
rp = event.values[0];
}
if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
lightReading.setText("LIGHT: " + event.values[0]);
rl = event.values[0];
}
if ((rp != -1) && (rl != -1) && (inclination != -1)) {
main.detect(rp, rl, g, inclination);
}
}

然后根据这些数据,我决定设备是否在口袋中:

public void detect(float prox, float light, float g[], int inc){
if((prox<1)&&(light<2)&&(g[1]<-0.6)&&( (inc>75)||(inc<100))){
pocket=1;
//IN POCKET
}
if((prox>=1)&&(light>=2)&&(g[1]>=-0.7)){
if(pocket==1){
playSound();
pocket=0;
}
//OUT OF POCKET
}

}

请记住,它并不完全准确。
代码:https://github.com/IvanLudvig/PocketSword
博客文章:https://ivanludvig.github.io/blog/2019/06/21/detecting-device-in-a-pocket-android.html

关于java - 检测口袋中的设备是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519285/

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