我计算智能手机-GPS和传感器位置的算法
我正在开发一个基于传感器数据来计算位置的Android应用程序 加速度计 - >计算线性加速度 磁力计 +加速度计 - >运动方向 初始位置将取自GPS(纬度 +经度). 现在根据传感器的读数,我需要计算智能手机的新位置: 我的算法正在遵循 - (但不是计算准确的位置):请帮助我改进它. 注意: 我的算法代码在c#中(我将传感器数据发送到服务器 - 数据存储在数据库中.我正在计算服务器上的位置)) 所有日期对象均已使用时间戳计算 - 从01-01-1970 var prevLocation = ServerHandler.getLatestPosition(IMEI); var newLocation = new ReceivedDataDTO() { LocationDataDto = new LocationD
6 2024-04-10
编程技术问答社区
加速器的最小和最大值范围及传感器数据转换
我有摩托罗拉的Moto G 16 GB设备.它具有LIS3DH 3轴加速度计. 用于读取最大和加速度计的最小值,我使用了此API. getMaximumRange() 但是,对于我的设备,我得到值 39.24 所以我虽然39.24/9.8 = 〜4.00 s我的范围是+/- 4G 但是,当我简单地读取x,y,z数据并将其存储在文件中时,并在将最大加速度加速到我的智能手机时查看值,然后将值显示为 76 m/sec2 这是什么意思? 我设备的这个错误吗? 如何以 +-2G值转换此值.我的算法希望以 +-2g格式的价值如何给予? 如何执行传感器数据值的剪切或下调? 解决方案 Moto G具有动态配置传感器.最初,它以4G模式配置.但是,当您对移动设备加速时,它会更改IT传感器模式并切换到8G,并且您仍然可以自动提供更多的加速度.一段时间后,它返回4G模式. 您可以在此范围更改上使用Sensocr精确度更改回调.
24 2024-04-09
编程技术问答社区
安卓4.3。BLE。startLeScan()的过滤行为
我正在使用蓝牙传感器设备,为此我需要形成一对一的数据广播.根据规格,外围设备可能只有一个主人,并且由于我正在设计的芯片和堆栈的局限性,主人只能有三个奴隶.据我了解,Android无论如何都无法成为BLE奴隶,因此将我的设备作为主设备不是一个选择. BT4规格和制造商文档都讨论了另一种操作模式,称为广播模式.在广播模式下,永远不会建立连接,并且应用程序数据作为广告数据包的一部分传输.这将完全适合我的需求,因为许多Android/iOS手机可以同时扫描每个数据包.广告包在爆发中多次传输,因此我怀疑数据大多是可靠的.如果在这里和那里丢失了一个数据包,则可以容忍. 这很有趣的是,我希望这些数据包携带实时传感器数据,以10-20Hz的速度更新.从我在网络上发现的示例中,在此模式下BLE主要用于" IBEACON"类型实现,它们正在广播静态数据.我找不到有关在Android堆栈中如何过滤广告数据包的任何信息.他们可能是他们每个蓝牙硬件地址返回一个结果,也可能是地址和数据的唯一组合.第二个
18 2024-04-01
编程技术问答社区
罗盘方向因手机方向不同而不同
我的增强现实应用程序需要摄像机视图的指南针,并且有很多例子从Sensormanager那里获取方向. 但是,我发现所产生的值不同,具体取决于电话方向 - 向右旋转的景观与旋转向左的景观大约10度(rotation_0和rotation_180之间的差异较小,但仍然不同).这种差异足以破坏任何AR效应. 与校准有关吗? (我不相信我正确地做了8件事 - 我尝试了在YouTube上找到的各种方式). 有什么想法为什么有区别?我在旋转矩阵的东西上弄乱了吗?我可以选择将应用程序限制为单个方向,但它仍然担心我的指南针读数仍然不是很准确(即使过滤相当稳定后) public void onSensorChanged(SensorEvent event) { if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) { return; } i
如何用C/C++玩转加速器和摄像头等设备?
您可以在Android平台下方在Android平台下看到的那样,使用不同的层. Application在Java 中开发 Application Framework使用Java(根据我的理解) Libraries在C/C++ 中 出于某种疯狂的原因,我必须使用accelerometer,compass和camera等设备播放/处理C/C++,这意味着直接在第三层中直接访问它们.根据我的理解,Application Framework本身将消耗Libraries用于访问这些设备,然后为Applications提供APIs. 我正在寻找任何可以帮助我的文档/教程/演示,即如何访问和使用这些设备,例如C/C++代码,或换句话说如何直接使用这些设备来自Libraries层. 我的最后一个选择是获取Android源代码并深入研究它,以找出我在寻找的内容,但我希望以文档的形式/演示/教程/任何可以使它成为一个简单的方法对我来说很容易. 解决方案 我正在寻找任
32 2024-03-03
编程技术问答社区
Android-如何使RotateAnimation更加流畅和 "物理"?
我正在实施一种"指南针箭头",该"指南针箭头"根据使用磁场传感器的物理方向遵循目的地.突然我遇到了一个小问题. 获得轴承和方位角是可以的,但是执行逼真的动画变成了一项非常艰巨的任务.我试图使用不同的插值器使动画更加"物理"(即,就像在真正的指南针中一样,箭头在发夹旋转后振荡,运动期间加速和减速). > 现在我正在使用interpolator.accelerate_decelerate,一切都很好,直到更新开始快速到达.这使得动画彼此重叠,箭头变得抽搐和紧张.我想避免这种情况.我试图实现一个队列,使每个动画都等到上一端,或者删除更快的更新.这使动画看起来很顺利,但是Arrow的行为变成了绝对不合逻辑的. 所以我有2个问题: 1)在动画相互重叠的情况下,是否有某种方法使动画过渡更加平滑? 2)有没有办法停止动画,该动画当前正在处理并获得对象的中间位置? 我的代码在下面. UpdateRotation()方法处理方向和轴承更新并执行外部viewArrow视
18 2024-02-26
编程技术问答社区
Android SensorManager.getOrientation()返回-PI/2和PI/2之间的间距。
我正在设计一个需要检查设备方向的应用程序(方位角,音高和滚动).我使用以下代码实现这一目标: @Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) gravityMatrix = event.values.clone();// Fill gravityMatrix with accelerometer values else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) geomagneticMatrix = event.values.clone();// Fill geomagneticMatrix with magnetic-field sensor values if(gravit
16 2024-02-20
编程技术问答社区
在安卓智能手表上记录数据时出现随机间隙
我正在使用化石Gen 5智能手表运行Wearos来记录加速度计,陀螺仪(32 Hz)和PPG传感器(64 Hz)的传感器数据.我正在使用一个唯一的缓冲作者对象,每个传感器在创建每个传感器事件时将数据写入.txt文件(如下所示): void registerSensor(){ Log.i(TAG,"Sensor Registered"); try { accWriter = new BufferedWriter(new FileWriter(accFile, true)); gyrWriter = new BufferedWriter(new FileWriter(gyrFile, true)); ppgWriter = new BufferedWriter(new FileWriter(ppgFile, true)); } catch (IOException e) { e.printSta
30 2024-02-18
编程技术问答社区
一个安卓应用上的多个传感器
我目前正在开发使用多个传感器的Android应用程序,我已经使用了 mSensor= mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);在OnCreate中获取传感器和onSensorChanged方法tv.setText("X: "+ sensorEvent.values[0] + ...);的方法,在文本视图中显示加速度计值. 如何添加更多传感器并以相同的方式显示其值? 该程序将如何知道我说sensorEvent.values[0]> 时指的是哪种传感器 感谢您提前的任何帮助, maja 解决方案 您需要检查传感器值是否是使用event.sensor.getType()方法的传感器值.因此,如果您想同时访问磁力计和加速度计: sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SER
8 2024-02-18
编程技术问答社区
不能在Android服务中注册多个传感器
我有一项从活动中调用的服务.该服务注册所有传感器,并注册听众对他们进行注册. 编辑:我在OnSensorChange() 中删除了两行 **sensorManager.unregisterListener(this); sensorManager = null;** 现在有效.为什么? 问题是,当我一次执行一次操作时,我的应用程序正常工作,但是如果我注册多个传感器,我的应用程序会崩溃. 这是我服务的发电函数: @Override public void onCreate() { super.onCreate(); mContext = getApplicationContext(); Toast.makeText(getApplicationContext(),"Service Created",Toast.LENGTH_SHORT).show(); sensorMan
18 2024-02-18
编程技术问答社区
当我注册一个传感器监听器时,我的应用程序崩溃了
在Android中,我正在创建一项服务,该服务将聆听传感器值的更改. 但是,每当我打开它时,我的应用程序都会不断崩溃.如果我删除行 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 它的工作正常 我创建了服务类如下: public class CustomSensorService extends Service implements SensorEventListener{ static SensorManager
12 2024-02-18
编程技术问答社区
安卓传感器在后台晃动
我正在尝试遵循有关传感器的教程.它可以通过一项活动效果.但是,我希望当手机锁定时在后台工作.最好的方法是什么? 这是教程的链接 http://jasonmcreynolds.com/?p=388 Shakedetector类 public class ShakeDetector implements SensorEventListener { /* * The gForce that is necessary to register as shake. * Must be greater than 1G (one earth gravity unit). * You can install "G-Force", by Blake La Pierre * from the Google Play Store and run it to see how * many G's it takes to register a shake */ private st
8 2024-02-18
编程技术问答社区
安卓传感器在服务中不工作
我是Android编程的新手,以下是我的用例: 我有一个"主动脉"和" MyService"服务的活动.我使用startService方法调用我的服务.在我的myService.java中,我注册了2个不同的传感器(`加速度计和光),并尝试获取传感器值. 这似乎很基础,我以以下方式进行编码: mainActivity.java public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(MainActivity.this, MyService.class);
8 2024-02-18
编程技术问答社区
用传感器数据更新前台服务通知
我正在开发一个计步器.我有一项运行良好的服务.我也使我的服务前景.但是如何使用传感器数据更新通知.我正在从传感器中获得步骤.我只想在通知中显示它,该通知向Usig展示了前景服务. public class StepCounterService extends Service { private static final String LOG_TAG = "ForegroundService"; public static Boolean FLAG = false; private SensorManager mSensorManager; private StepDetector detector; private PowerManager mPowerManager; private WakeLock mWakeLock; @Override public IBinder onBind(Intent
16 2024-02-18
编程技术问答社区
安卓系统的进程是坏的,杀死应用程序时出现错误
这是确切的错误 02-08 12:36:43.490 3479-4980/? W/ActivityManager: Scheduling restart of crashed service com.wfl/.StepTrackerShakeDetectorService in 1000ms 02-08 12:36:44.494 3479-3513/? W/ActivityManager: Unable to launch app com.wfl/10139 for service Intent { cmp=com.wfl/.StepTrackerShakeDetectorService }: process is bad 这是场景 它基本上是步进跟踪器 Steptrackershakedetectorservice 使用start_sticky 自动重新启动以自动重新启动 但是当该应用程序从任务列表中删除时,我会遇到此错误. 这是代码. public
8 2024-02-18
编程技术问答社区
长期运行的服务会消耗大量的电池
我开发了一个应用程序,有些人抱怨它需要太多电池,这是仅次于屏幕的第二大消费过程.但是,在某些设备中,它不会消耗太多电池. 我的应用程序所做的所有工作都是在服务中.该服务很粘,并且一直在运行(当设备入睡时,Android系统可能会在资源低时杀死它或暂停它),只要屏幕打开,它就会有侦听器对加速度计,它不是前景服务并且不容纳Wakelock. 有人可以告诉我为什么需要大量电池吗? 为什么这仅在某些设备上发生? 这是相关代码: public class aListenerService extends Service implements SensorEventListener { private BroadcastReceiver mScreenReceiver = new BroadcastReceiver() { // if screen was turned on then register to accelerometer
12 2024-02-18
编程技术问答社区
在一个后台服务中使用TYPE_STEP_COUNTER?
我正在考虑实现Android 4.4中引入的步骤传感器API( http://yv9jskpvluc/a>).但是,我找不到有关在后台监控的建议方法的明确解释?似乎大多数示例仅显示应用程序运行时如何使用活动进行操作.我特别不需要高频率的更新 - 我基本上想记录用户每小时步行的步骤数量,以提供后端服务. 我应该只是旋转一个背景服务,该服务在Sensormanager上调用RegisterListener,还是有更优雅的方式? 据我所知, 解决方案 SensorManager> SensorManager都没有办法,但是如果您非常需要数据,则可以手动触发传感器并使用TriggerEventListener获得其值,这是一个比SensorEventListener. 更干净 AlarmManager通常是启动每小时计时器的最佳选择,即使您的应用不运行,它也有效. AlarmManager将Intent发送到扩展BroadcastReceiver的类,该类将启动您的Service. A
22 2024-02-18
编程技术问答社区
android-哪个线程会运行onSensorChanged?
如果我将侦听器连接到设备的传感器(如下),在这种情况下,在发生onsensorchanged时,哪个线程运行generateNewRotation方法,主线程或...? SensorEventListener sensorListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { generateNewRotation(); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; 解决方案 OnSensorChanged()在主线程中被称为UI线程.
16 2024-02-17
编程技术问答社区
在安卓系统中改变传感器坐标系
Android无论是如何定向,都可以在设备坐标系中提供传感器数据.有什么方法可以在"重力"坐标系中使用传感器数据?我的意思是,无论设备如何定向,我都希望在坐标系中加速度计数据和方向,Y轴指向天空,X轴向东,Z轴向南极. 我看了看remapCoordinateSystem,但似乎仅限于交换轴.我想为方向,我将不得不进行一些低级旋转矩阵转换(或者有更好的解决方案吗?).但是加速数据怎么样?是否有任何方法可以将数据与固定的坐标系(世界坐标系)有关. 我需要的原因是,当手机放在手机中时,我正在尝试执行一些简单的运动手势,对于我来说,将所有数据与用户而是设备坐标系统相关的坐标系统中更容易(这将具有在不同用户的口袋中有些不同的方向) 解决方案 开始,您基本上可以在开始时获得北方方向 - 为此,您使用加速度计和磁场传感器来计算方向(或不推荐的方向传感器). 拥有它后,您可以从那些方位角,螺距和滚动角度计算旋转矩阵(方向余弦矩阵).将您的加速度向量乘以该矩阵将使您的设备框架移动
14 2024-02-17
编程技术问答社区