मेरे पास एक ऐप है जो एक स्थान तय करता है। ऐप को जिंजरब्रेड अप से फोन पर ले जाना है। एक बार ऐप को स्थान प्राप्त करने के बाद उपयोगकर्ता को टोस्ट संदेश प्रदर्शित किया जाता है। समस्या यह है कि जब उपयोगकर्ता अगली गतिविधि में जाता है तो टोस्ट संदेश शायद दस बार दिखाई देता है।एंड्रॉइड लोकेशन मैनेजर को कॉल करने के लिए जारी रखा जाता है स्थान हटाए जाने के बाद चेंज किया गया
मुझे लगता है कि मैं सही ढंग से 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);
यह लिंक मदद कर सकता है। पहला जवाब देखें। http://stackoverflow.com/questions/3449676/locationmanager-calling-onlocationchanged-too-often –