无法在一项活动中获取加速度计传感器和 GPS 位置数据,问题出在哪里?

Posted

技术标签:

【中文标题】无法在一项活动中获取加速度计传感器和 GPS 位置数据,问题出在哪里?【英文标题】:Cannot get accelerometer sensor and GPS Location data in one activity, where is the problem? 【发布时间】:2019-12-16 22:42:21 【问题描述】:

我正在尝试在一项活动中同时获取 GPS 和加速度计数据。 试图将它们都保存在两个不同的表中。 加速度计数据没问题,我保存了它,但是在使用位置监听器后它不起作用并且没有提供 GPS 数据。

在 MANIFEST 中添加了权限。 权限似乎没问题。

public class MainActivity extends AppCompatActivity implements SensorEventListener 
    DatabaseHelper dbHelper;
    private SensorManager sensorManager;
    private Sensor linearAccelerometer;
    private LocationManager locationManager;
    private LocationListener locationListener;
    public float a;
    public float b;
    public float c;
    private final static String TAG = "MainActivityTest";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: Initilizing Sensor Services");

        //LOCATION
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationListener = new LocationListener() 
            @Override
            public void onLocationChanged(Location location) 
                Toast.makeText(getBaseContext(), "GPS Value Changed ", Toast.LENGTH_LONG).show();

                Log.d(TAG, "Latitude is   "+location.getLatitude() + "    Longitude is    "+ location.getLongitude());
            

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) 

            

            @Override
            public void onProviderEnabled(String s) 

            

            @Override
            public void onProviderDisabled(String s) 

            

        ;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
                requestPermissions(new String[]
                        Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET
                ,10);
            return;
        
        else
                
                    locationManager.requestLocationUpdates("gps", 2000, 0, locationListener);

                






        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
linearAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            // so we have accelerometer
            sensorManager.registerListener(MainActivity.this, linearAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
            Toast.makeText(getBaseContext(), "Sensor Registered ", Toast.LENGTH_LONG).show();
            Log.d(TAG, "Registered LINEAR ACC");
        



    @Override
    public void onSensorChanged(SensorEvent sensorEvent) 
        Toast.makeText(getBaseContext(), "Sensor Value Changed ", Toast.LENGTH_LONG).show();
        Log.d(TAG, "X value is   "+ sensorEvent.values[0] + "    Y value is    "+ sensorEvent.values[1] + "    Z value is   " + sensorEvent.values[2]);


        //SQLITE INSERTATION
       Sensor sensor = sensorEvent.sensor;
       a = sensorEvent.values[0];
       b = sensorEvent.values[1];
       c = sensorEvent.values[2];

       if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) 

            dbHelper.getInstance().insert(a, b, c);
       

    

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) 

    

没有错误。未提供 GPS 数据。

【问题讨论】:

你在哪个 android 版本上测试过这个? 在 Emulator Nexus X5 API 28 上测试 【参考方案1】:

可能问题是首先,检查并获取permission,然后注册location listener。检查以下链接。问候。

stack overflow get user location

【讨论】:

检查这些:locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 0, locationListener); 如果注释加速度传感器代码和检查位置回调是否正常工作? (仅位置) 不,仍然没有 GPS 数据。 所以问题在于获取位置,与加速度计代码无关。 是的,这绝对是我的第一个问题。

以上是关于无法在一项活动中获取加速度计传感器和 GPS 位置数据,问题出在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

无法将位置从一项活动返回到另一项活动

Web Worker 中的传感器读数

关闭屏幕后无法从加速度传感器android获取值

仅从 Xamarin Android 中的 GPS 传感器检索位置信息

iOS 12.2是否支持PWA的GPS?

如何从 SensorManager 获取线性加速度数据?