无法在一项活动中获取加速度计传感器和 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 位置数据,问题出在哪里?的主要内容,如果未能解决你的问题,请参考以下文章