8

GPS部分に取り組んでおり、基準については、精度をACCURACY_FINE、ACCURACY_MEDIUMなどに設定できます。ただし、Criteriaを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" />

これが私のログです:

 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

Android2.3.5ファームウェアを使用して開発しています。ありがとう!

4

3 に答える 3

21

android Criteriaには、精度定数の2つの別個のグループがあります。ACCURACY_FINEおよびACCURACY_COARSEは一般的な位置用ですが、、、ACCURACY_LOWおよびACCURACY_MEDIUMACCURACY_HIGH「水平、高度、速度、または方位の精度に使用できます」。一般的なGPS位置について話している場合は、粗いまたは細かいものを使用する必要があります。

于 2012-07-05T16:02:19.470 に答える
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);
于 2013-05-08T11:23:54.740 に答える
2

ACCURACY_FINEは、ACCURACY_COARSEそれぞれ1と2の定数値でグループ化されます。ACCURACY_LOWMEDIUMおよびHIGHは定数値1、2、および3でグループ化されます。

COARSEsetAccuracyは、またはのいずれかを期待して返すようですがFINE、setVerticalAccuracy、setHorizo​​ntalAccuracy、setSpeedAccuracy、およびsetBearingAccuracyはLOWMEDIUMまたはを期待し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。私はこれがよりよく文書化されるべきであることに同意します。

于 2013-11-11T20:41:52.280 に答える