2011-01-23 17 views
8

मैं विधि बोल रहा हूँ और स्थान की उम्मीद बुलाया कई बार अद्यतन करता है:स्थान प्रबंधक के requestLocationUpdates केवल एक बार

locationManager.requestLocationUpdates("gps",0 ,0, loc_listener); 

मेरे loc_listener के रूप में परिभाषित किया गया है:

LocationListener loc_listener = new LocationListener() { 
    private final String TAG = "xoxoxo.LocationListener"; 

    public void onLocationChanged(Location l) { 
     Intent locationAlert = new Intent("xoxoxo.LOCATION_CHANGED") 
       .putExtra("target_location", l); 
     sendBroadcast(locationAlert); 
     // locationManager.requestLocationUpdates("gps", 0 ,0, this); 
    } 

    public void onProviderEnabled(String p) { 
     Log.i(TAG, "Provider enabled"); 
    } 

    public void onProviderDisabled(String p) { 
     Log.i(TAG, "Provider disabled"); 
    } 

    public void onStatusChanged(String p, int status, Bundle extras) { 
     Log.i(TAG, "Status changed"); 
    } 
}; 

परिभाषित किया गया है के रूप में, मैं केवल एक मिल जाएगा एचटीसी एवो 2.2 और 2.2 + Google एपीआई एमुलेटर दोनों पर एक बार अपडेट करें।

locationManager.requestLocationUpdates("gps", 0 ,0, this); 

तुम लोग इस तरह कुछ भी देखा है: कई नई जानकारी प्राप्त होती हैक लाइन जो प्रत्येक अद्यतन पर अद्यतन के लिए पंजीकृत करता है uncomment के लिए है?

+1

आप तेजी से स्थान पाने के लिए NETWORK_PROVIDER का उपयोग कर सकते हैं ... – Anand

+0

मेरे आवेदन के लिए केवल ठीक स्थान की आवश्यकता है। इसके बिना, अधिक कार्यक्षमता खो जाती है। जीपीएस प्रदाता के लिए –

+0

आपको खुली आकाश की स्थिति की आवश्यकता है ताकि यह बहुत तेज़ी से और सटीक रूप से अपडेट हो सके, लेकिन यदि आप इमारत के अंदर हैं तो आपको कम से कम अद्यतन स्थान प्राप्त करने के कारण नेटवर्क प्रदाता को लागू करने की आवश्यकता है जो जीपीएस की तुलना में कम सटीक है। – Anand

उत्तर

14

मैंने इस मुद्दे को कभी नहीं देखा है। LocationManager और LocationListener का परीक्षण करने के लिए मेरा कोड निम्न है। यह अपेक्षित कार्य करता है जब स्थानसूची को अज्ञात वर्ग के रूप में लागू किया जाता है।

package com.test.locationmanager; 

import android.app.Activity; 
import android.content.Context; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.location.LocationProvider; 
import android.os.Bundle; 
import android.widget.TextView; 

public class LocationManagerStatus extends Activity { 

    private LocationManager locationManager; 
    private TextView textView; 
    private final LocationListener gpsLocationListener =new LocationListener(){ 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      final String tvTxt = textView.getText().toString(); 
      switch (status) { 
      case LocationProvider.AVAILABLE: 
       textView.setText(tvTxt + "GPS available again\n"); 
       break; 
      case LocationProvider.OUT_OF_SERVICE: 
       textView.setText(tvTxt + "GPS out of service\n"); 
       break; 
      case LocationProvider.TEMPORARILY_UNAVAILABLE: 
       textView.setText(tvTxt + "GPS temporarily unavailable\n"); 
       break; 
      } 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "GPS Provider Enabled\n"); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "GPS Provider Disabled\n"); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      locationManager.removeUpdates(networkLocationListener); 
      textView.setText(textView.getText().toString() 
        + "New GPS location: " 
        + String.format("%9.6f", location.getLatitude()) + ", " 
        + String.format("%9.6f", location.getLongitude()) + "\n"); 
     } 
    }; 
    private final LocationListener networkLocationListener = 
                 new LocationListener(){ 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras){ 
      final String tvTxt = textView.getText().toString(); 
      switch (status) { 
      case LocationProvider.AVAILABLE: 
       textView.setText(tvTxt + "Network location available again\n"); 
       break; 
      case LocationProvider.OUT_OF_SERVICE: 
       textView.setText(tvTxt + "Network location out of service\n"); 
       break; 
      case LocationProvider.TEMPORARILY_UNAVAILABLE: 
       textView.setText(tvTxt 
         + "Network location temporarily unavailable\n"); 
       break; 
      } 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "Network Provider Enabled\n"); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "Network Provider Disabled\n"); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      textView.setText(textView.getText().toString() 
        + "New network location: " 
        + String.format("%9.6f", location.getLatitude()) + ", " 
        + String.format("%9.6f", location.getLongitude()) + "\n"); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textView = (TextView) findViewById(R.id.textview); 
     locationManager = (LocationManager) 
       getSystemService(Context.LOCATION_SERVICE); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(
       LocationManager.NETWORK_PROVIDER, 5000, 0, 
       networkLocationListener); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       3000, 0, gpsLocationListener); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(networkLocationListener); 
     locationManager.removeUpdates(gpsLocationListener); 
    } 
} 
+1

इस स्निपेट के लिए धन्यवाद, एक आकर्षण की तरह काम करता है! – Johan

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