2013-07-27 10 views
6

मैं एंड्रॉइड प्रोग्रामिंग के लिए नया हूं और एक बहुत ही बुनियादी ऐप बनाकर शुरू करना चाहता हूं जो स्क्रीन पर वर्तमान स्थान के अक्षांश और देशांतर को प्रदर्शित करता है।स्थान क्लाइंट getLastLocation() वापस शून्य

मैं अपने सैमसंग गैलेक्सी एस 3 के लिए विकास कर रहा हूं और पढ़ता हूं कि आपको kickstart the phone to return the GPS की आवश्यकता है।

मैंने onConnected() विधि में requestLocationUpdates() विधि कॉल के साथ विधि प्रबंधक पर ऐसा करने का प्रयास किया है। हालांकि मुझे लगता है कि LocationClient अभी भी null स्थान लौटा रहा है।

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?

यहाँ मेरी MainActivity है:

import android.content.Context; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesClient; 
import com.google.android.gms.location.LocationClient; 

public class MainActivity extends FragmentActivity implements 
     GooglePlayServicesClient.ConnectionCallbacks, 
     GooglePlayServicesClient.OnConnectionFailedListener { 

    private LocationClient mLocationClient; 
    private Location mCurrentLocation; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mLocationClient = new LocationClient(this, this, this); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     mLocationClient.connect(); 
    } 

    @Override 
    protected void onStop() { 
     mLocationClient.disconnect(); 
     super.onStop(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onConnected(Bundle arg0) { 
     Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); 
     LocationManager manager = (LocationManager) this 
       .getSystemService(Context.LOCATION_SERVICE); 
     manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, 
       new LocationListener() { 
        @Override 
        public void onStatusChanged(String provider, int status, 
          Bundle extras) { 
        } 

        @Override 
        public void onProviderEnabled(String provider) { 
        } 

        @Override 
        public void onProviderDisabled(String provider) { 
        } 

        @Override 
        public void onLocationChanged(final Location location) { 
        } 
       }); 
     mCurrentLocation = mLocationClient.getLastLocation(); 

     TextView latTextView = (TextView) findViewById(R.id.latitude_text); 
     latTextView.setText(Double.toString(mCurrentLocation.getLatitude())); 

     TextView longTextView = (TextView) findViewById(R.id.longitude_text); 
     longTextView.setText(Double.toString(mCurrentLocation.getLongitude())); 
    } 

    @Override 
    public void onDisconnected() { 
     Toast.makeText(this, "Disconnected. Please re-connect.", 
       Toast.LENGTH_SHORT).show(); 
    } 

} 

मेरे Android प्रकट इस तरह दिखता है:

<uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 


    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.willigetwet.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

डिबगर मुझे लगता है कि mCurrentLocation mLocationClient.getLastLocation() करने के लिए कॉल के बाद रिक्त है चल रहा है।

मैं किसी भी मदद के लिए बहुत आभारी हूं!

उत्तर

8

mLocationClient.getLastLocation(); यदि आपके पास डिवाइस द्वारा सहेजा गया कोई अंतिम स्थान नहीं है तो शून्य हो सकता है। यदि आप इसे documentation पढ़ते हैं, तो यह कहता है;

It returns the best most recent location currently available. If a location is not available, which should happen very rarely, null will be returned

इसके अलावा onLocationChanged विधि के अंदर आप नवीनतम स्थान, जब आपके स्थान बदल जाती है के लिए स्थान निर्धारित करने के लिए चाहते हो सकता है।

@Override 
public void onLocationChanged(final Location location) { 
     mCurrentLocation = location; 
} 
+0

यह बिल्कुल था - मेरे पास कोई आखिरी स्थान सहेजा नहीं गया था। मुझे दूसरे दिन एक प्रतिस्थापन एस 3 मिला और पूरी तरह से भूल गया कि मैंने स्थान सेवाओं का उपयोग नहीं किया था। जीपीएस सेट करने के लिए Google मानचित्र पर एक क्लिक करें और यह अभी ठीक काम कर रहा है :)। धन्यवाद! –

+0

खुशी है कि यह आपके लिए काम करता है :) –

+0

गॉट त्रुटि स्थान क्लाइंट को स्थानांतरित नहीं कर सकता .... –

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