android - GPS 位置提供商在 Android 中为我提供了空位置

标签 android gps location locationmanager locationlistener

我尝试在 android 中使用 GPS_Provider 查找位置。当尝试使用 Network_Provider 获取位置时,它会给我位置并正确调用回调函数,但是当我尝试使用 GPS_Provider 获取位置时,它会给我位置 null & 也不调用 LocationListener 的回调函数 onLocationChanged

我的代码是:

 LocationManager lm;
    boolean isNetwork = false;
    Location location;
    LocationListener locationListener;
    LocationListener loc;
    MyLocation myLocation;
    Location location1;

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

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

        try {
            myLocation = new MyLocation();

            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                Log.e("Location", "Permission Not Given");
                return;
            }
            Log.e("Location", "Permission is Given");
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocation);
            location1=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        }catch(Exception e)
        {

        }
    }

MyLocation.class

public class MyLocation implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {

        if(location!=null)
        {

            String lat,Longi;
            lat=String.valueOf(location.getLatitude());
            Longi=String.valueOf(location.getLongitude());

            Log.e("Latitude: " , lat);
            Log.e("Longitude: " , Longi);

        }
        else
            Log.e("Location is null", "Location not Found");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.e("Latitude: " ,""+ provider+ " Status: "+status);
    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {
        Log.e("Latitude: " , provider);
    }
}

它给我的 logcat 错误如下:

02-04 00:50:52.280 14480-14480/com.arc.locationusingnetwork E/Location: Permission is Given
02-04 00:50:52.360 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 46
02-04 00:50:52.370 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 49
02-04 00:50:52.370 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50
02-04 00:50:52.380 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50
02-04 00:50:52.380 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50
02-04 00:50:52.390 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 52

最佳答案

旧的 LocationListener 类可能已被弃用。你应该使用 FusedLocationApi由 Android 获取当前位置或通过 FusedLocationAPI 的 LocationListener 接收位置更新。

这是使用 FusedLocationApi 的一个很好的教程:Android Location API

关于android - GPS 位置提供商在 Android 中为我提供了空位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35193670/

相关文章:

android - Android string.xml 中的类转换异常

android - 确定移动设备是否在移动的飞机上?

android - LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, 这个);尝试转换为 com.google.android.gms.location.LocationListener)

Android Google API方向更新

Android FusedLocationProvider 在手机空闲时停止提供位置

android - 什么是 Android Play 服务 SDK 级别?

android - iOS 设备看不到 Nexus 9 宣传的 AltBeacon 信标

Android 模拟位置提供程序未从 LocationManager 中清除

java - 在 Android 中的单独线程上使用循环器

android - 如何获取wifi热点的位置?