Android GPS ACCURACY_HIGH导致强制closures?

我正在工作的GPS部分和标准,我可以设置准确性ACCURACY_FINE,ACCURACY_MEDIUM等,但由于某种原因,我不断收到一个强制closures错误如果我把它的标准ACCURACY_HIGH。 关于什么可能会导致它的任何想法?

inheritance人我的清单,即时通讯相当确定一切正常,因为我能够使用不同的标准:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> 

这是我的日志:

  07-05 08:51:48.641: W/dalvikvm(1040): threadid=1: thread exiting with uncaught exception (group=0x40015578) 07-05 08:51:48.657: E/AndroidRuntime(1040): FATAL EXCEPTION: main 07-05 08:51:48.657: E/AndroidRuntime(1040): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jetdelivery.mobile/com.jetdelivery.mobile.statuspage}: java.lang.IllegalArgumentException: accuracy=3 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.os.Handler.dispatchMessage(Handler.java:99) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.os.Looper.loop(Looper.java:130) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.app.ActivityThread.main(ActivityThread.java:3687) 07-05 08:51:48.657: E/AndroidRuntime(1040): at java.lang.reflect.Method.invokeNative(Native Method) 07-05 08:51:48.657: E/AndroidRuntime(1040): at java.lang.reflect.Method.invoke(Method.java:507) 07-05 08:51:48.657: E/AndroidRuntime(1040): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 07-05 08:51:48.657: E/AndroidRuntime(1040): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 07-05 08:51:48.657: E/AndroidRuntime(1040): at dalvik.system.NativeStart.main(Native Method) 07-05 08:51:48.657: E/AndroidRuntime(1040): Caused by: java.lang.IllegalArgumentException: accuracy=3 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.location.Criteria.setAccuracy(Criteria.java:223) 07-05 08:51:48.657: E/AndroidRuntime(1040): at com.jetdelivery.mobile.statuspage.onCreate(statuspage.java:125) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-05 08:51:48.657: E/AndroidRuntime(1040): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 07-05 08:51:48.657: E/AndroidRuntime(1040): ... 11 more 

我正在开发使用Android 2.3.5固件。 谢谢!

Solutions Collecting From Web of "Android GPS ACCURACY_HIGH导致强制closures?"

Android Criteria有两个独立的精度常量组。 ACCURACY_FINEACCURACY_COARSE用于一般位置,而ACCURACY_LOWACCURACY_MEDIUMACCURACY_HIGH “可用于水平,高度,速度或方位精度。 如果你正在谈论一般的GPS位置,你应该使用粗糙或罚款。

为了更清楚地说明matt5784的答案,下面是一个如何使用新常量的例子:

  //All your normal criteria setup Criteria criteria = new Criteria(); //Use FINE or COARSE (or NO_REQUIREMENT) here criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAltitudeRequired(true); criteria.setSpeedRequired(true); criteria.setCostAllowed(true); criteria.setBearingRequired(true); //API level 9 and up criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH); criteria.setBearingAccuracy(Criteria.ACCURACY_LOW); criteria.setSpeedAccuracy(Criteria.ACCURACY_MEDIUM); 

ACCURACY_FINE被分组为ACCURACY_COARSE ,其值分别为1和2。 ACCURACY_LOWMEDIUMHIGH与常数值1,2和3一起分组。

看来setAccuracy期望并返回COARSEFINE ,而setVerticalAccuracy,setHorizo​​ntalAccuracy,setSpeedAccuracy和setBearingAccuracy期望LOWMEDIUMHIGH 。 此外,当您调用setAccuracy时,它会设置如下的水平精度:

 public void setAccuracy(int accuracy) { if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_COARSE) { throw new IllegalArgumentException("accuracy=" + accuracy); } if (accuracy == ACCURACY_FINE) { mHorizontalAccuracy = ACCURACY_HIGH; } else { mHorizontalAccuracy = ACCURACY_LOW; } } 

所以,使用ACCURACY_FINE 。 我同意这应该是更好的logging。