2012-12-04 14 views
7

मेरे पास एक ऐप है जो एक स्थान तय करता है। ऐप को जिंजरब्रेड अप से फोन पर ले जाना है। एक बार ऐप को स्थान प्राप्त करने के बाद उपयोगकर्ता को टोस्ट संदेश प्रदर्शित किया जाता है। समस्या यह है कि जब उपयोगकर्ता अगली गतिविधि में जाता है तो टोस्ट संदेश शायद दस बार दिखाई देता है।एंड्रॉइड लोकेशन मैनेजर को कॉल करने के लिए जारी रखा जाता है स्थान हटाए जाने के बाद चेंज किया गया

मुझे लगता है कि मैं सही ढंग से lifecycles जैसे

1) OnCreate() 2) बनाने में एक स्थान प्रबंधक हो और onResume (में प्रबंधक को एक स्थान श्रोता पारित) 3 क्रियान्वित किया है) में अद्यतन को दूर onStop()

मैं समझता हूँ कि मैं>

mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null); 

फोन करके 4.x एंड्रॉयड में इस समस्या को बायपास कर सकते हैं, लेकिन मैं जिंजरब्रेड समायोजित करने के लिए तो एक ही अनुरोध बुला है एपीआई 2.3.x. में नहीं है यह एंड्रॉइड 4 पर ठीक काम करता है लेकिन जिंजरब्रेड पर ऑनलाक्शन चेंजेड विधि 10 बार निष्पादित करता रहता है।

मैं जिंजरब्रेड पर केवल एक बार चलाने के लिए ऑनलाक्शन चेंज विधि को कैसे मजबूर कर सकता हूं?

धन्यवाद।

[संपादित करें] मैंने देखा है कि जब मैं अगली गतिविधि onlocationchanged विधि क्रियान्वित रहता है, लेकिन अगर मैं एक और गतिविधि के लिए कदम तो स्थान अनुरोध सफलतापूर्वक

@Override 
protected void onStop() { 
    mlocManager.removeUpdates(mlocListener); 
    mlocListener = null; 
    super.onStop(); 
} 

@Override 
protected void onResume() { 
    mlocListener = new MyLocationListener(); 
    if(isCompOptionsReceived == true){ 
     if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) { 
      mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null); 
     }else{ 
      mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
     } 
    }   
    super.onResume(); 
} 

private class MyLocationListener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location loc) { 
     //toast message 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onStatusChanged(String provider, int status,      Bundle extras) { 
    } 

}//end of MyLocationListener 

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    nfcscannerapplication = (NfcScannerApplication) getApplication(); 
    sIs = savedInstanceState; 
    setContentView(R.layout.entryscreen); 
    mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
+0

यह लिंक मदद कर सकता है। पहला जवाब देखें। http://stackoverflow.com/questions/3449676/locationmanager-calling-onlocationchanged-too-often –

उत्तर

3

निम्नलिखित कोड निकाल दिए जाते हैं पर ले जाने के ऑन-स्टॉप विधि पर निष्पादित किया जाना चाहिए, ऑनस्टॉप

mlocManager.removeUpdates(mlocListener); 
mlocListener = null; 

यह सभी एंड्रॉइड संस्करणों के लिए इसे ठीक करेगा।

+0

हाय, मैंने ऑनपॉज़() विधि में चलाने के लिए कोड में संशोधन किया है, लेकिन एक बार स्थान लॉक को निकालने के बाद, यह जारी है श्रोता को हटाए जाने से पहले लगभग 5 और ताले प्राप्त करें। इसका मेरे ऐप पर असर पड़ता है क्योंकि ऑनलाक्शन में मैंने उपयोगकर्ता को अलर्ट संवाद के साथ प्रस्तुत किया है। इसलिए आप एक नया संवाद लूपिंग देख सकते हैं क्योंकि स्थान श्रोता को अंततः अनियंत्रित होने से पहले नए ताले मिल रहे हैं। लॉक मिलने के तुरंत बाद श्रोता को अपंजीकृत करने का कोई तरीका है? धन्यवाद – turtleboy

+0

बेशक, आप हमेशा पहली बार श्रोताओं को कॉलर चेंज किया जाता है (और आगे की कॉलों को अनदेखा करते हैं) पर हस्ताक्षर नहीं कर सकते हैं, लेकिन यह मेरे लिए ज्यादा समझ में नहीं आता है, विशेष रूप से क्योंकि पहली जगह सटीकता के मामले में आमतौर पर सबसे अच्छी नहीं होती है और परिशुद्धता –

+0

हाय, मैंने ऑनलाक्शन चेंज विधि के भीतर हटाए गए अपडेट रद्द कर दिए हैं और यह ठीक काम करता है। मैं समझता हूं कि आप सटीक फिक्स नहीं पाने के संबंध में क्या कह रहे हैं और मैं आमतौर पर ऐसा नहीं करता जहां स्थान चिंतित हैं लेकिन मुझे केवल ऑब्जेक्ट पर getTime() को कॉल करने के लिए लॉक की आवश्यकता है। यह सिस्टम समय के खिलाफ बाहरी समय की तुलना करने के लिए है। धन्यवाद – turtleboy

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

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