Android GPS ACCURACY_HIGH导致力量关闭?

Joh*_*yen 8 android

我正在研究GPS部分和标准,我可以将精度设置为ACCURACY_FINE,ACCURACY_MEDIUM等.但是,由于某种原因,我不断得到一个力关闭错误如果我将它设置为ACCURACY_HIGH的标准.关于可能导致什么的任何想法?

继承我的清单,我非常确定一切正常,因为我可以使用不同的标准:

<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" />
Run Code Online (Sandbox Code Playgroud)

这是我的日志:

 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
Run Code Online (Sandbox Code Playgroud)

我正在使用Android 2.3.5固件进行开发.谢谢!

mat*_*784 21

android Criteria有两组独立的精度常数.ACCURACY_FINE并且ACCURACY_COARSE用于一般位置,而ACCURACY_LOW,ACCURACY_MEDIUMACCURACY_HIGH"可用于水平,高度,速度或轴承精度." 如果您正在谈论一般GPS位置,您应该使用粗略或精细.

  • `ACCURACY_MEDIUM`是`0x00000002`,所以`ACCURACY_COARSE`; `ACCURACY_LOW`是`0x00000001`,因此是'ACCURACY_FINE`.而'ACCURACY_HIGH`是'0x00000003` (3认同)

Jor*_*rdy 18

为了更清楚地阐明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);
Run Code Online (Sandbox Code Playgroud)