使用 LocationManager 时位置显示为空

Posted

技术标签:

【中文标题】使用 LocationManager 时位置显示为空【英文标题】:Location is displaying as null when using LocationManager 【发布时间】:2012-07-24 17:14:39 【问题描述】:

我想获取当前位置的经纬度。我为此使用了 LocationManager,但它显示位置为空,纬度和经度为 0.0。我已在清单和 GPS 连接中使用了所需的权限。

代码:

LocationdemoActivity.java

public class LocationdemoActivity extends Activity 

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,mlocListener);
        mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);

        Button buttonLocation = (Button) findViewById(R.id.buttonLocation);
        buttonLocation.setOnClickListener(new View.OnClickListener() 
            public void onClick(View view) 

                Toast.makeText(
                        getApplicationContext(),
                        "loc:" + MyLocationListener.location + "latitude "
                                + MyLocationListener.latitude + "longitude "
                                + MyLocationListener.longitude, 5000).show();

            

        );

    

MyLocationListener.java

 public class MyLocationListener implements LocationListener 

    public static double latitude;

    public static double longitude;
    public static Location location;

    @Override
    public void onLocationChanged(Location loc)
    
        location = loc;
        loc.getLatitude();
        loc.getLongitude();
        latitude = loc.getLatitude();
        longitude = loc.getLongitude();
    
    @Override
    public void onProviderDisabled(String provider)
    
    
    @Override
    public void onProviderEnabled(String provider)
    
    
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras)
    
    
    protected boolean isRouteDisplayed() 
        return false;
    

清单中的权限:

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

有什么问题?

【问题讨论】:

你在哪里检查这个模拟器或设备? 确保网络或 GPS 提供商在位置设置中运行。如果您使用的是模拟器,则必须使用 DDMS 模拟您的位置。 @Akki Iam 检查设备和模拟器.. 但仍然没有得到 mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,mlocListener); mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);仅向一个提供商提出请求并检查 @Hesham Saeed Iam 在设备中运行代码。在位置设置中使用 GPS 卫星已打开。设置里有没有其他的。代码有问题吗.. 【参考方案1】:

尝试做这样的事情

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,mlocListener);

location = mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

Button buttonLocation = (Button) findViewById(R.id.buttonLocation);

 buttonLocation.setOnClickListener(new View.OnClickListener() 

        public void onClick(View view) 

              Toast.makeText(getApplicationContext(),
                            "loc:" + location + "latitude "
                                    + location.latitude + "longitude "
                                    + location.longitude, 5000).show();

                

            );

【讨论】:

嘿,它在设备中运行良好....谢谢兄弟....我怀疑我是否搬到另一个位置,纬度和经度将正确更改...我想要制作我的监听器代码,因为 onLocationChanged() 中没有变量和空代码。我认为这样不会有问题

以上是关于使用 LocationManager 时位置显示为空的主要内容,如果未能解决你的问题,请参考以下文章

LocationManager-定位方式原理解析

在地图中显示当前位置时获取纬度和经度0.0

如何使用 LocationManager 在 android 中获取当前位置

locationManager:didExitRegion: 应用程序运行时未调用

错误:收集用户位置时,“代表必须响应 locationManager:didUpdateLocations:”

使用 google locationManager 获取 0.0 位置