java.lang.IllegalArgumentException:运行我的路线跟踪活动时精度=3。。。这是GPS精度问题吗?

java.lang.IllegalArgumentException:运行我的路线跟踪活动时精度=3。。。这是GPS精度问题吗?,java,android,gps,maps,tracking,Java,Android,Gps,Maps,Tracking,在我的路线跟踪活动中,onMapReady似乎没有发挥应有的作用。在我在Android Studio NeueRouteAufzeichnen.java下用java实现的路线跟踪活动的当前版本中(Neue route Aufzeichnen-德语-意思是开始记录新路线),我在onMapReady中添加了以下内容 if(mLastLocation != null) { LatLng myPosition = new LatLng(mLastLocation.getLatitude(

在我的路线跟踪活动中,onMapReady似乎没有发挥应有的作用。在我在Android Studio NeueRouteAufzeichnen.java下用java实现的路线跟踪活动的当前版本中(Neue route Aufzeichnen-德语-意思是开始记录新路线),我在onMapReady中添加了以下内容

if(mLastLocation != null) {
        LatLng myPosition = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
        map.addMarker(new MarkerOptions().position(myPosition).title("myPosition"));
        map.moveCamera(CameraUpdateFactory.newLatLng(myPosition));
    } else{
        LatLng sydney = new LatLng(-34, 151);
        map.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        map.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
检查mLastLocation是否为空。当我在我的应用程序中移动到此活动时,我看到谷歌地图将要打开一个地图视图,然后进入我在代码中未提及的其他活动。我既看不到我现在的住处,也看不到悉尼

这是我的NeueRouteAufzeichnen.java

package com.noureddine_ouertani.www.wocelli50;

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.drive.Drive;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;

import java.util.ArrayList;
import java.util.List;


 public class NeueRouteAufzeichnen extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

private LocationManager locationManager;
private Location mLastLocation;
private Location previousLocation;
private long distanceTraveled;

private boolean tracking = false;
private long startTime;
private PowerManager.WakeLock wakeLock;
private boolean gpsFix;

private static final double MILLISECONDS_PER_HOUR = 100 * 60 * 60;
private static final double MILES_PER_KILOMETER = 0.621371192;
private static final int MAP_ZOOM = 18;

private List<Location> locations;


LocationListener mlocationListener;
GoogleMap map;

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
        .enableAutoManage(this /* FragmentActivity */,
                this /* OnConnectionFailedListener */)
        .addApi(Drive.API)
        .addScope(Drive.SCOPE_FILE)
        .build();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }
    setContentView(R.layout.activity_neue_route_aufzeichnen);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    locations = new ArrayList<Location>();
}

protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onConnected(Bundle connectionHint) {
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}

@Override
public void onConnectionSuspended(int i) {

}

public void addPoint(Location location) {
    locations.add(location);
}

@Override
public void onMapReady(GoogleMap map) {

    distanceTraveled = 0;

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_HIGH);
    criteria.setBearingRequired(true);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    criteria.setAltitudeRequired(false);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
        float LOCATION_REFRESH_DISTANCE = 1;
        long LOCATION_REFRESH_TIME = 100;
        mlocationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

                updateLocation(location);
            }

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

            }

            @Override
            public void onProviderEnabled(String s) {

            }

            @Override
            public void onProviderDisabled(String s) {

            }
        };

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mlocationListener);
    }
    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "NO Sleep");
    wakeLock.acquire();
    if(mLastLocation != null) {
        LatLng myPosition = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
        map.addMarker(new MarkerOptions().position(myPosition).title("myPosition"));
        map.moveCamera(CameraUpdateFactory.newLatLng(myPosition));
    } else{
        LatLng sydney = new LatLng(-34, 151);
        map.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        map.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
    draw();
    tracking = true;
    startTime = System.currentTimeMillis();

}

protected void updateLocation(Location location) {

    if (location != null && gpsFix == true) {
        addPoint(location);

        if (previousLocation != null)
            distanceTraveled += location.distanceTo(previousLocation);
    }
    previousLocation = location;
}

public void draw() {

    if (map == null) {
        return;
    }

    PolylineOptions options = new PolylineOptions();

    options.color(Color.parseColor("#CC0000FF"));
    options.width(5);
    options.visible(true);

    for (Location locRecorded : locations) {
        options.add(new LatLng(locRecorded.getLatitude(),
                locRecorded.getLongitude()));
    }

    map.addPolyline(options);

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}
}
以下是我在将精度设置为“精细”后得到的日志消息:

06-17 19:33:27.170 20083-20083/com.noureddine_ouertani.www.wocelli50 E/AndroidRuntime:致命异常:主 流程:com.noureddine_ouertani.www.wocelli50,PID:20083 java.lang.IllegalArgumentException:精度=3 位于android.location.Criteria.setAccurance(Criteria.java:223) 在 www.wocelli50.NeueRouteAufzeichnen.onMapReady(NeueRouteAufzeichnen.java:155) 位于com.google.android.gms.maps.SupportMapFragment$zza$1.zza(未知) (来源) 位于com.google.android.gms.maps.internal.zzo$zza.onTransact(未知) (来源) 位于android.os.Binder.transact(Binder.java:380) 在wv.a(:com.google.android.gms.DynamiteModulesB:82) 在maps.ag.t$5.run(未知来源) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:135) 位于android.app.ActivityThread.main(ActivityThread.java:5538) 位于java.lang.reflect.Method.invoke(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

当我使用

粗精度


这回答了你的问题吗?这回答了你的问题吗?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
                  tools:context="com.noureddine_ouertani.www.wocelli50.NeueRouteAufzeichnen">
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    tools:context=".NeueRouteAufzeichnen"
    android:name="com.google.android.gms.maps.SupportMapFragment" />

 </RelativeLayout>
155  else{
156      LatLng sydney = new LatLng(-34, 151);
157        map.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
158        map.moveCamera(CameraUpdateFactory.newLatLng(sydney));