带有加速度检测的谷歌地图在安卓工作室中不起作用



我正在用Android Studio制作一个应用程序,谷歌地图显示用户的位置,我想添加一个加速度检测器,这样当用户的加速度非常大时,就会弹出一个警报对话框。

带有用户位置的地图正在工作,但当我尝试添加加速度传感器时,应用程序崩溃(没有错误警告(。代码如下:

public abstract class Mapa extends FragmentActivity implements OnMapReadyCallback, SensorEventListener {
private GoogleMap mMap;
LocationManager locationManager;
LocationListener locationListener;
private SensorManager sensorManager;
Sensor accelerometer;
private SensorManager sensorManager2;
Sensor giroscopio;

@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mapa);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
sensorManager.registerListener(Mapa.this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float acX;
acX = sensorEvent.values[0];       
if (acX >= 10 ){
AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
builder1.setMessage("Warning!");
AlertDialog mensajealerta = builder1.create();
mensajealerta.show();
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
LatLng posicion = new LatLng(location.getLatitude(), location.getLongitude());
mMap.clear();
mMap.addMarker(new MarkerOptions().position(posicion).title("Estás aquí!"));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(posicion, 20));
}
@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 < 23) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
} else {               locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
Location ultimaPosicion = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
LatLng posicion = new LatLng(ultimaPosicion.getLatitude(), ultimaPosicion.getLongitude());
mMap.clear();
mMap.addMarker(new MarkerOptions().position(posicion).title("Estás aquí!"));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(posicion, 20));
}
}
}
}

我不明白错误在哪里,你能帮我吗?

我终于自己想好了,所以我会发布答案,以防其他人需要。

显然,当你把谷歌地图和加速度计放在同一个活动中时,它不起作用,所以我不得不把它们分开。为了做到这一点,我使用了一个检测加速度的服务。

通过查看以下内容,我成功地启动了我的服务:安卓传感器无法在服务中工作

完成后,我会使用LocalBroadcastManager将加速度计信息发送到地图活动:如何使用LocalBroadcastManager?

通过遵循这两个问题中给出的说明,我设法使其发挥作用。

相关内容

最新更新