为什么网络位置提供程序返回null Android的

时间:2013-11-12 09:27:55

标签: android geolocation

在我的应用中,我使用网络提供商获取当前位置。在这方面我开发了一些代码,你可以在下面看到它。

public class MyGPS extends Service implements LocationListener
{
    protected LocationManager locationManager;
    private final Context mContext;

    public MyGPS (Context context) {
        this.mContext = context;

        getLocation();
    }

    public Location getLocation() {
        try {

            locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

            // Check network status
            if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                Log.e("Location ", "Network enabled");

                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000,1, this);
                if (locationManager != null) 
                {
                    Log.e("Location ", "Location manager is not null");
                    Location networkLocation= locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (networkLocation != null) {
                        return networkLocation;
                    }
                    else
                    {
                        Log.e("Location ", "networkLocation object is null");
                    }
                }
            }
        }
        catch(Exception e) {
            Log.e("Location ", "Problum in getLocation()");
        }
        return null;

    }

    @Override
    public void onLocationChanged(Location arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

}

通过运行上面的代码,它显示调试消息Log.e("Location ", "networkLocation object is null");

现在我的问题是networkLocation对象为空的原因。请帮助我这方面。提前谢谢。

3 个答案:

答案 0 :(得分:0)

当设备获取位置时,它将调用onLocationChanged侦听器。在上述情况下,您尝试获取lastKnownLocation。如果没有lastKnownLocation,则会返回null

所以请保存onLocationChanged听众的位置。

答案 1 :(得分:0)

  

public Location getLastKnownLocation(String provider)在API中添加   1级

     

返回指示上一个已知位置的数据的位置   从给定的提供者处获得的修复。

     

这可以在不启动提供程序的情况下完成。请注意这一点   位置可能已过时,例如,如果设备已转动   关闭并搬到另一个地方。

     

如果当前禁用了提供程序,则返回null。参数   provider提供者的名称返回

the last known location for the provider, or null

答案 2 :(得分:0)

您是否设置了权限? 表现 uses-permission android:name =“android.permission.ACCESS_FINE_LOCATION” 清单

http://developer.android.com/guide/topics/location/strategies.html