位置返回始终为空 - android

Posted

技术标签:

【中文标题】位置返回始终为空 - android【英文标题】:Location returns always null - android 【发布时间】:2012-07-30 03:40:05 【问题描述】:

Location 始终从此代码返回 null。请检查我的代码并告诉我出了什么问题。当我在调试模式下运行项目时,provider="network" 但位置始终为空。我使用 DDMS 发送纬度和经度值,但没有改变。我不明白这是什么问题

onCreate方法中的这部分

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        provider = lm.getBestProvider(criteria, true);
        location = lm.getLastKnownLocation(provider);

            updateLocation(location);

onResume方法中的这部分

@Override   
    protected void onResume()   
        super.onResume();
        lm.requestLocationUpdates(provider, 5000, 10, this);
    

我使用 LocationListener(MapActivity 实现 LocationListener),这是 onLocationChanged 部分

public void onLocationChanged(Location location) 
        updateLocation(location);   
    

这终于是我的 updateLocation()

private void updateLocation(Location location)
        if (location != null) 
            Double lat = location.getLatitude()*1E6;
            Double lng = location.getLongitude()*1E6;
            point = new GeoPoint(lat.intValue(), lng.intValue());

            mapView = (MapView) findViewById(R.id.mapView);
            mc = mapView.getController();
            mapView.setBuiltInZoomControls(true);

            //List<Overlay> overlays = mapView.getOverlays();
            myLocOverlay = new MyLocationOverlay(this, mapView);
            //overlays.add(myLocOverlay);
            mapView.getOverlays().add(myLocOverlay);
            myLocOverlay.enableMyLocation();

            myLocOverlay.runOnFirstFix(new Runnable() 
                public void run() 
                    mc.animateTo(myLocOverlay.getMyLocation());
                    
            ); 

            mc.setZoom(15);
            mapView.invalidate();

            

    

我授予了必要的权限并使用了谷歌地图库

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

<uses-library
            android:name="com.google.android.maps"
            android:required="true" >
        </uses-library>

【问题讨论】:

你在模拟器上使用这个代码吗? 是的。我也安装到手机上,但它不起作用。 试试这个***.com/questions/11183859/… 尝试通过其他方法获取位置 getProvider("GPS"); 我的代码快疯了 :D 我在我的设备上卸载应用程序并重新安装它,然后它就可以工作了。但是在模拟器上,虽然我使用 DDMS 发送纬度和经度,但它不起作用。我在 HTC Wildfire 上安装并且应用程序可以运行,但我在 HTC One X 上安装并且应用程序无法运行。 【参考方案1】:

我认为你应该使用 LocationManager.GPS_PROVIDER 来请求。你可以测试我的代码:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1l,1f, new LocationListener()         
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) 
         // TODO Auto-generated method stub

    

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

    

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

    

    @Override
    public void onLocationChanged(Location location) 
    // TODO Auto-generated method stub
        updateLocation(location);               
    
    );

祝你好运! ^-^

【讨论】:

你的代码和我的代码一样。在 HTC Wildfire 上效果很好,但在模拟器上和 HTC One X 上它不起作用。

以上是关于位置返回始终为空 - android的主要内容,如果未能解决你的问题,请参考以下文章

从始终返回空的点查找最近的位置

SmartLocationLibrary 位置始终为空

GWT/GXT 项目中的窗口位置 getParameter 始终为空?

selectedIndexes() 返回的 QModelIndexList 始终为空

GoogleApiClient 中的 getLastLocation() 始终为空

FusedLocationApi.getLastLocation 在后台始终为空