我正在研究GPS部分和标准,我可以将精度设置为ACCURACY_FINE,ACCURACY_MEDIUM等。但是,由于某种原因,我不断得到力关闭错误如果我将标准设置为ACCURACY_HIGH。关于可能导致什么的任何想法?
Heres my Manifest,我非常确定一切正常,因为我可以使用不同的标准:
<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固件进行开发。谢谢!
答案 0 :(得分:19)
android Criteria有两组不同的精度常数。 ACCURACY_FINE
和ACCURACY_COARSE
用于一般位置,而ACCURACY_LOW
,ACCURACY_MEDIUM
和ACCURACY_HIGH
“可用于水平,海拔,速度或方位精度。”如果您正在谈论一般的GPS位置,您应该使用粗略或精细。
答案 1 :(得分:17)
为了更清楚地阐明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);
答案 2 :(得分:2)
ACCURACY_FINE
与ACCURACY_COARSE
分组,常数值为1&amp;分别为2。 ACCURACY_LOW
,MEDIUM
和HIGH
与常量值1,2和&amp;组合在一起。 3。
似乎setAccuracy期望并返回COARSE
或FINE
,而setVerticalAccuracy,setHorizontalAccuracy,setSpeedAccuracy和setBearingAccuracy期望LOW
,MEDIUM
或HIGH
。此外,当您调用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
。我同意这应该更好地记录下来。