【问题标题】:app crashes when criteria set to high accuracy当标准设置为高精度时应用程序崩溃
【发布时间】:2015-11-18 03:36:13
【问题描述】:

我正在尝试获得尽可能高的定位精度,这是我从 GPS 提供商那里了解到的。我只需要获取一次位置,所以我不关心对电池寿命的影响。在我的功能代码中,位置似乎在完全不准确(1+km)到非常准确(10m 以内)之间交替出现。在我的应用程序的整个测试过程中,我在手机上启用/禁用位置,打开/关闭 wifi,打开/关闭数据。这只是为了试验,看看每种方法如何影响准确性和一般的应用程序。

以下代码是我在位置活动中的 onCreate 方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_layout);

    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map_fragment))
            .getMap();
    mMap.setMyLocationEnabled(true);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();

    //criteria.setAccuracy(Criteria.ACCURACY_HIGH);

    provider = locationManager.getBestProvider(criteria, true);

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();

    // Create the LocationRequest object
    mLocationRequest = LocationRequest.create()
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
            .setInterval(2 * 1000)        // 10 seconds, in milliseconds
            .setFastestInterval(1 * 1000); // 1 second, in milliseconds
}

但是,当我添加 criteria.setAccuracy(Criteria.ACCURACY_HIGH); 行时,我的应用程序崩溃了。

发生了什么事?

编辑:这是 logcat 错误:

E/AndroidRuntime: FATAL EXCEPTION: main    
E/AndroidRuntime: Process: com.locationget, PID: 16663    
E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.locationget/com.locationget.MapActivity}: java.lang.IllegalArgumentException: accuracy=3    
E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)    
E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271    
E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:144)    
E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)    
E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)    
E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)    
E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5146)    
E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)    
E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)    
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)     
E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)    
E/AndroidRuntime:  Caused by: java.lang.IllegalArgumentException: accuracy=3    
E/AndroidRuntime:     at android.location.Criteria.setAccuracy(Criteria.java:223)    
E/AndroidRuntime:     at com.getlocation.MapActivity.onCreate(MapActivity.java:47)    
E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5231)    
E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)    
E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)    
E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271    
E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:144)     
E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)        
E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)        
E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)        
E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5146)        
E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)     
E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)     
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)       
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)     
E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method) 

我对 android 比较陌生,不太确定相关部分是什么。

【问题讨论】:

  • 向我们展示错误的堆栈跟踪

标签: android google-maps location


【解决方案1】:

这一行是真正的错误:

E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.locationget/com.locationget.MapActivity}:java.lang.IllegalArgumentException: accuracy=3

这是我搜索后发现的:

android Criteria 有两组不同的精度常数。 ACCURACY_FINE 和 ACCURACY_COARSE 用于一般位置,而 ACCURACY_LOW、ACCURACY_MEDIUM 和 ACCURACY_HIGH “可用于 水平、高度、速度或方位精度。”

所以在你的情况下,不要使用ACCURACY_HIGH 否则你会得到一个错误。请改用ACCURACY_COARSEACCURACY_FINE

【讨论】:

    【解决方案2】:

    使用criteria.setAccuracy(Criteria.ACCURACY_FINE); 而不是criteria.setAccuracy(Criteria.ACCURACY_HIGH);

    Criteria

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多