Android GPS ACCURACY_HIGH导致力量关闭?

时间:2012-07-05 15:54:51

标签: android

我正在研究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固件进行开发。谢谢!

3 个答案:

答案 0 :(得分:19)

android Criteria有两组不同的精度常数。 ACCURACY_FINEACCURACY_COARSE用于一般位置,而ACCURACY_LOWACCURACY_MEDIUMACCURACY_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_FINEACCURACY_COARSE分组,常数值为1&amp;分别为2。 ACCURACY_LOWMEDIUMHIGH与常量值1,2和&amp;组合在一起。 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。我同意这应该更好地记录下来。