下面的代碼內(nèi)容是關(guān)于Android獲取用戶location值為NULL的解決辦法的代碼瓢阴,應(yīng)該是對(duì)碼農(nóng)有一些用處咒彤。
package com.jeedroid.tools;?
?
import java.io.IOException;?
import java.util.List;?
import java.util.Locale;?
?
import android.content.Context;?
import android.location.Address;?
import android.location.Criteria;?
import android.location.Geocoder;?
import android.location.Location;?
import android.location.LocationListener;?
import android.location.LocationManager;?
import android.os.Bundle;?
import android.provider.Settings;?
import android.util.Log;?
?
public class LocationTools?
{?
? ? private Location location;?
public static LocationManager getLocationManager(Context context)?
{?
? ? return (LocationManager) context.getSystemService(context.LOCATION_SERVICE);?
}?
public String getAddress(Context context)?
{?
? ? LocationManager locationManager = this.getLocationManager(context);?
? ? if(!locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER))?
? ? {?
? ? android.provider.Settings.Secure.setLocationProviderEnabled(context.getContentResolver(), LocationManager.GPS_PROVIDER, false);?
? ? }?
? ? return doWork(context);?
}?
?
private String doWork(Context context)?
{?
? ? String addres="";?
? ? LocationManager locationManager = this.getLocationManager(context);?
? ? Criteria criteria = new Criteria();?
? ? criteria.setAccuracy(Criteria.ACCURACY_FINE);? ?
? ? criteria.setAltitudeRequired(false);? ?
? ? criteria.setBearingRequired(false);? ?
? ? criteria.setCostAllowed(false);? ?
? ? criteria.setPowerRequirement(Criteria.POWER_LOW);? ?
? ? String provider =locationManager.getBestProvider(criteria, true);?
? ? Log.i("provider>>>>>>", provider);?
? ? while(location==null)?
? ? {?
? ? location =locationManager.getLastKnownLocation(provider);?
? ? }?
? ? LocationListener locationListener = new LocationListener()?
? ? {?
?
? ? ? ? @Override?
? ? ? ? public void onLocationChanged(Location location)?
? ? ? ? {?
? ? ? ? ? ? LocationTools.this.location=location;?
? ? ? ? }?
?
? ? ? ? @Override?
? ? ? ? public void onProviderDisabled(String provider)?
? ? ? ? {?
? ? ? ? ? ? ?
? ? ? ? }?
?
? ? ? ? @Override?
? ? ? ? public void onProviderEnabled(String provider)?
? ? ? ? {?
? ? ? ? ? ? ?
? ? ? ? }?
?
? ? ? ? @Override?
? ? ? ? public void onStatusChanged(String provider, int status, Bundle extras)?
? ? ? ? {?
? ? ? ? ? ? ?
? ? ? ? }?
? ? ? ? ?
? ? };?
? ? locationManager.requestLocationUpdates(provider, 1000, 10, locationListener);?
? ?
? ? Geocoder geo = new Geocoder(context,Locale.getDefault());?
? ? try?
? ? {?
? ? ? ? List<Address> address=geo.getFromLocation(location.getLatitude(), location.getLongitude(), 1);?
? ? ? ? if(address.size()>0)?
? ? ? ? {?
? ? ? ? ? ? addres=address.get(0).getAddressLine(0);?
? ? ? ? }?
? ? } catch (IOException e)?
? ? {?
? ? ? ? e.printStackTrace();?
? ? }?
? ? return addres;?
}?
}?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ? ? ?