محاولة الحصول على موقع جهاز أكثر دقة من GPS أو الشبكة في Android

StackOverflow https://stackoverflow.com/questions/2428729

سؤال

أحاول تحديد موقع أكثر دقة للجهاز، في أقصر وقت ممكن.

أنا أخصم البيانات كجيوبوينت، ولديها عرضها على MAPView.

آخر مرة قمت بتنشيط GPS على جهازي واتركها الحصول على قفل موقع، كنت على بعد حوالي 80 ميلا من حيث أنا الآن.

لدي إعداد مدير الموقع ومستمع الموقع.

إذا قمت بذلك، أحصل على NULL.

  myLocOverlay = new MyLocationOverlay(this, mapView);
  GeoPoint test = myLocOverlay.getMyLocation();

ولكن في البنود القادمة؛

  myLocOverlay.enableMyLocation();      
  mapView.getOverlays().add(myLocOverlay);

مع هذا، يظهر التراكب على الخريطة الموقع الحالي. إنه يستخدم مزود الشبكة، ولكن يحاول أيضا الحصول على إصلاح GPS (لا يمكن أن أكون كما أنا في الداخل ولا يوجد مكان بالقرب من الطابق العلوي).

إذا قمت ببناء Geopoint مثل هذا؛

    if(lm.getLastKnownLocation("gps") != null) 
    {
     test = new GeoPoint(
        (int) (lm.getLastKnownLocation("gps").getLatitude() * 1E6), 
        (int) (lm.getLastKnownLocation("gps").getLongitude() * 1E6));
    }

    else
    {

    if(lm.getLastKnownLocation("network") != null) 
    {
     test = new GeoPoint(
       (int) (lm.getLastKnownLocation("network").getLatitude() * 1E6), 
       (int) (lm.getLastKnownLocation("network").getLongitude() * 1E6));
    }
    //bad things
    }

ثم أحصل على نتائج مربكة. إذا قمت بتعطيل مزود الأجهزة GPS، فإن التعليمات البرمجية يتحرك على مزود الشبكة ويعطيني نتيجة دقيقة إلى حد ما. إذا قمت بتمكين مزود GPS، فسترجع Geopoint كمركز آخر سمحت للجهاز بالحصول على قفل GPS.

أريد تجنب النتائج المذكورة أعلاه، وكذلك كان يبحث في استخدام؛

GeoPoint test = myLocOverlay.getMyLocation();

ولكن كما قلت أعلاه، أنا فقط احصل على خالية من ذلك.

اختصار الحصول على Geopoints من كل من GPS والشبكة ثم مقارنة معهم، وتتجاهل نتيجة GPS إذا كان الأمر كذلك، فهناك ميل من موقع الشبكة - أنا عالق قليلا. لماذا لا يعمل العمل () العمل، لا ينبغي أن يعود Geopoint ما يظهر myLocoverlay على mapview؟

هل كانت مفيدة؟

المحلول

قد يعود NULL لأنه لم يحصل على إصلاح حتى الآن. يجب عليك تسجيل LocationListener هذا يقبل التحديثات من كل من مصادر الشبكة و GPS. ثم، عند الحصول على تحديث الموقع، يمكنك إلقاء نظرة على دقة الموقع وتحديد ما إذا كنت تريد استخدامه.

نصائح أخرى

أعتقد أنك تسأل بسرعة كبيرة عن نقطة جغرافية. سيستخدم MyLocationOverlay مستمعي خاص به لاسترداد الإصلاح. وربما يطلب الأمر إصلاح GPS يبحث كم عمره، ثم إذا كان هذا قديما جدا يحصل على إصلاح الشبكة واستخدام ذلك أثناء انتظار إصلاح GPS.

هذا يعني التحدث مع شرائح GPS ومودم GSM و Web Backend في الخلفية.
لن يكون ذلك ممكنا في الوقت الذي يحتاجه البرنامج للذهاب إلى السطر التالي.

في UI، ستبدو فورية جدا ولكنها تقاس مع عيون البشر.

يمكنك الذهاب مع الإجابة من CaseyB وتسجيل مستمع GPS الخاص بك على كل من مقدمي الخدمات وتقرر لنفسك الذين يرغبون في استخدامها. إذا كنت ترغب في القيام بذلك، فهناك طرق لاكتساب وقت الإصلاح الأخير (الموقع.gettime ()) ودقة المواقع.

الاحتمال الثاني هو الانتظار قليلا وتبدو إذا كانت المكالمة لا تزال تعرت فارغة إذا كان الأمر كذلك، فانتظر لفترة أطول قليلا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top