2012-07-05 13 views
7

मैं एक जीपीएस भाग पर काम कर रहा हूं और मानदंडों के लिए, मैं सटीकता को ACCURACY_FINE, ACCURACY_MEDIUM आदि पर सेट कर सकता हूं। हालांकि, किसी कारण से मैं एक बल बंद त्रुटि प्राप्त करता रहता हूं अगर मैं इसे ACCURACY_HIGH में मानदंड सेट करता हूं। क्या हो सकता है इसके बारे में कोई विचार?एंड्रॉइड जीपीएस ACCURACY_HIGH बल बंद कर देता है?

यहाँ मेरा प्रकट, im यकीन है कि सब कुछ ठीक है, क्योंकि मैं अलग मापदंडों का उपयोग करने में सक्षम हूँ:

<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 

मैं एंड्रॉयड 2.3 का उपयोग कर विकसित कर रहा हूँ। 5 फर्मवेयर। धन्यवाद!

उत्तर

19

एंड्रॉइड Criteria में सटीकता स्थिरांक के दो अलग-अलग समूह हैं। ACCURACY_FINE और ACCURACY_COARSE सामान्य स्थान के लिए हैं, जबकि ACCURACY_LOW, ACCURACY_MEDIUM, और ACCURACY_HIGH "क्षैतिज, ऊंचाई, गति या असर सटीकता के लिए उपयोग किया जा सकता है।" यदि आप सामान्य जीपीएस स्थान के बारे में बात कर रहे हैं तो आपको मोटे या ठीक का उपयोग करना चाहिए।

+0

हमम, शायद मैं ACCURACY_HIGH का गलत उपयोग कर रहा हूं। मैं आपसे पूछना चाहता हूं कि ACCURACY_MEDIUM मेरे लिए क्यों काम करता है, लेकिन ACCURACY_HIGH नहीं करता है? –

+3

'ACCURACY_MEDIUM'' 0x00000002' है इसलिए 'ACCURACY_COARSE' है; 'ACCURACY_LOW'' 0x00000001' है इसलिए 'ACCURACY_FINE' है। जबकि 'ACCURACY_HIGH'' 0x00000003' – nullpotent

+1

यह सच है, लेकिन सिर्फ इसलिए कि वे समकक्ष मानों के साथ स्थिर हैं, इसका मतलब यह नहीं है कि आपको गलत का उपयोग करना चाहिए ... वह पथ भ्रम और अपठनीयता की ओर जाता है। कोरस और फाइन सामान्य स्थान के लिए हैं, जबकि अन्य ऊंचाई, गति आदि के लिए हैं। – matt5784

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

ACCURACY_FINE क्रमशः 1 & 2 की लगातार मूल्यों के साथ ACCURACY_COARSE के साथ समूहीकृत है। ACCURACY_LOW, MEDIUM और HIGH, निरंतर मूल्यों 1 के साथ एक साथ बांटा जाता है 2 & 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 का उपयोग करें। मैं सहमत हूं कि यह बेहतर दस्तावेज होना चाहिए।

संबंधित मुद्दे