标签: android-sensors

我将如何在广播接收器中检测运动传感器?

我在Manifest.xml中编写了一个接收器来检测设备运动是否发生了变化

 <receiver android:name="com.hanuman.sensor.receiver.SensorReceiver" >
            <intent-filter
                android:enabled="true"
                android:exported="false" >
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

和内部接收器onReceive()方法代码是:

String action = intent.getAction();
        if (action.equals(Intent.ACTION_USER_PRESENT)) {
            System.out.println("User is present");
            Intent s = new Intent(context, MainActivity.class);
            s.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(s);
        } else {
            System.out.println("User is not present");
        }
Run Code Online (Sandbox Code Playgroud)

最后我的问题是,当它被移动时没有检测到传感器,它正在检测我的设备何时解锁然后它正在调用我的MainActivity,但我想检测我的设备运动何时被更改然后我想在接收器中检测到.我怎样才能做到这一点?.

android sensor broadcastreceiver android-sensors

19
推荐指数
1
解决办法
3044
查看次数

Android:如何从可穿戴设备获取Google Fit数据?

我遵循此处描述的相同步骤 (Google Fit客户端连接部分工作正常).

    final DataType dataType=TYPE_STEP_COUNT_DELTA;
    DataSourcesRequest requestData = new DataSourcesRequest.Builder()
            .setDataTypes(dataType)  // At least one datatype must be specified.
            .build();
    Fitness.SensorsApi.findDataSources(mClient, requestData)
            .setResultCallback(new ResultCallback<DataSourcesResult>() {
                @Override
                public void onResult(DataSourcesResult dataSourcesResult) {
                    Log.i(TAG, "Result: " + dataSourcesResult.getDataSources().size() + " sources "
                            + dataSourcesResult.getStatus().toString());
                    for (DataSource dataSource : dataSourcesResult.getDataSources()) {
                        Log.i(TAG, "Data source found: " + dataSource.toString());
                        Log.i(TAG, "Data Source type: " + dataSource.getDataType().getName());
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

当我要求数据源时,我只得到一个结果就是智能手机.如果我添加一个监听器,那么我真的得到数据,所以它正在工作.

不过它也可以通过手机与Android Wear智能手表Gear Live和Android Wear应用程序连接.Google Fit已安装在两者中,但我想从智能手表获取数据.

在我阅读的官方指南中

Sensors API提供对Android设备上可用传感器以及可穿戴设备等配套设备中可用传感器的原始传感器数据流的访问 . …

android android-sensors google-fit-sdk google-fit wear-os

18
推荐指数
1
解决办法
4654
查看次数

18
推荐指数
2
解决办法
1534
查看次数

17
推荐指数
3
解决办法
2万
查看次数

如何在android上制作精确的指南针

我的android应用程序显示了世界上某个特定位置的方向,因此需要获得指南针度.
这是我用来计算学位的代码:

public void getDirection() {        
    mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if(mySensors.size() > 0){
        mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_UI);           
    }
    else{
        TextView alert = (TextView)findViewById(R.id.instruct);
        alert.setText(getString(R.string.direction_not_found));
        myCompassView.setVisibility(myCompassView.INVISIBLE);

    }
}
private SensorEventListener mySensorEventListener = new SensorEventListener(){

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        compassBearing = (float)event.values[0];
        float bearing;
        bearing = compassBearing - templeBearing;
        if (bearing < 0)
            bearing = 360 + bearing;
        myCompassView.updateDirection(bearing); …
Run Code Online (Sandbox Code Playgroud)

android orientation android-sensors compass-geolocation

17
推荐指数
1
解决办法
3万
查看次数

如何在android中校准方向传感器?

我正在Google Android 2.1中编写一个应用程序,需要知道设备(HTC Hero)面向哪个方向(n/w/s/e).传感器及其听众工作得很好,但我从传感器获得的值非常糟糕.例如它告诉我当设备面向SW时我会面向北方......

这似乎是Android设备的已知问题.我在网上找到的"解决方案"如下所示:

  • 摇动设备
  • 像八个一样移动设备
  • 点击设备背面

这被认为是触发传感器重新校准的原因.而且:"四处走动"的东西对我有用......但我觉得这不是很专业......

那么 - 如何从SDK触发方向传感器的重新校准?我需要对传感器进行适当的校准,而没有任何花哨的东西会让这个应用程序的用户看起来像完全白痴,而他们"手动"重新校准他们的手机......

有没有办法做到这个"正确"?

编辑:

或者:有没有办法确定PROGRAMMATICY,如果设备是否正确校准?作为后备选项可以说......然后我可以警告用户该设备需要"手动"重新校准.

java android android-sensors

16
推荐指数
1
解决办法
2万
查看次数

android方向传感器有哪些替代方案?

嗨,我正在为Android构建3D游戏.

我目前正在尝试为我的游戏添加一个传感器,允许玩家将Android作为其控件倾斜.

理想情况下,我想使用ORIENTATION传感器,但我注意到它已被弃用.有谁知道如何检测Android中的倾斜并且不使用此传感器?

events android android-sensors

16
推荐指数
1
解决办法
2万
查看次数

OpenCV,OpenGL和Android Sensor之间的参考坐标系更改

我正在使用OpenCV,AndroidOpenGL进行增强现实项目.据我所知,OpenGL中的coordintate系统是

在此输入图像描述

OpenCV坐标系是:

在此输入图像描述

将这些设备与Android传感器组合时,如何进行坐标系转换和[R | t]矩阵转换?是否有一个很好的教程或文档解释了所有这些令人讨厌的东西?

opencv opengl-es rotation coordinate-transformation android-sensors

15
推荐指数
1
解决办法
1万
查看次数

SensorEvent.timestamp不一致

我的应用程序使用android 4.4.X中引入的步进检测器传感器API在后台步骤计数中执行.

我的应用程序必须知道每个步骤事件产生的确切时间(至少准确度为一秒).

因为我执行传感器批处理,所以onSensorChanged(SensorEvent event)调用的时间与步骤事件发生的时间不同 - 我必须使用该event.timestamp字段来获取事件时间.

有关此字段的文档是:

事件发生的纳秒时间

问题:

在某些设备(例如Moto X 2013)中,这个时间戳似乎是自启动以来的纳秒时间,而在某些设备(例如Nexus 5)中,它实际上以纳秒为单位返回通用系统时间System.currentTimeMills() / 1000.

据我所知,关于这一点已经存在一个陈旧的问题,但是由于引入了传感器批处理 - 使用该字段来了解事件时间变得非常重要,并且不可能再依赖于System.currentTimeMills()

我的问题:

我该怎么做才能在所有设备上始终以系统毫秒为单位获取事件时间?

android nanotime android-sensors

15
推荐指数
1
解决办法
3503
查看次数

Android:Shake Detector太敏感了

我正在尝试检测摇动 - 我正在使用以下代码,它工作得非常好,但在某些设备(例如Galaxy note 2)中它会很快检测到震动(在某些情况下 - 当我只是握住手机还是)

main.java:

ShakeListener mShaker = new ShakeListener(this);
     mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
         public void onShake()
         {
        // Some code...
         }
     });
}
Run Code Online (Sandbox Code Playgroud)

ShakeListener.java:

package com.my.app;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.Toast;
import android.content.Context;
import java.lang.UnsupportedOperationException;

public class ShakeListener implements SensorEventListener
{
      private static final int FORCE_THRESHOLD = 700;
      private static final int TIME_THRESHOLD = 100;
      private static final int SHAKE_TIMEOUT = 500;
      private static final int SHAKE_DURATION = 1000;
      private static …
Run Code Online (Sandbox Code Playgroud)

android android-sensors

14
推荐指数
1
解决办法
7473
查看次数