Android GPS定位不起作用

Android GPS定位不起作用,android,gps,location,maps,Android,Gps,Location,Maps,我使用此功能查找我的位置 public static String getadrr() { String adres = ""; String bestProvider = null; Geocoder geocoder = null; List<Address> user = null; double lati, longi; LocationManager lm = (LocationManager) cx.getSyste

我使用此功能查找我的位置

    public static String getadrr() {
    String adres = "";
    String bestProvider = null;
    Geocoder geocoder = null;
    List<Address> user = null;
    double lati, longi;
    LocationManager lm = (LocationManager) cx.getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_COARSE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    bestProvider = lm.getBestProvider(criteria, true);

    if (ActivityCompat.checkSelfPermission(cx, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(cx, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

    }
    Location location = lm.getLastKnownLocation(bestProvider);
    if (location == null){
        return "CustomLocation Not found";
    }else{
        geocoder = new Geocoder(cx);
        try {
            user = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
            lati=(double)user.get(0).getLatitude();
            longi=(double)user.get(0).getLongitude();
            adres =(String)user.get(0).getAddressLine(0);
            Log.e("Data","lat : "+lati);
            Log.e("Data","long : "+longi);
            Log.e("Data","adres : "+adres);

        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    return adres;
}
公共静态字符串getadrr(){
字符串adres=“”;
字符串bestProvider=null;
地理编码器地理编码器=空;
列表用户=null;
双纬、长纬;
LocationManager lm=(LocationManager)cx.getSystemService(Context.LOCATION\u服务);
标准=新标准();
标准.设定精度(标准.精度\u粗略);
标准。setAltitudeRequired(false);
标准。需要设置(假);
条件.setCostAllowed(true);
标准。设置功率要求(标准。功率低);
bestProvider=lm.getBestProvider(标准,true);
if(ActivityCompat.checkSelfPermission(cx,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(cx,Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
}
位置=lm.getLastKnownLocation(bestProvider);
if(位置==null){
返回“未找到CustomLocation”;
}否则{
地理编码器=新地理编码器(cx);
试一试{
user=geocoder.getFromLocation(location.getLatitude(),location.getLatitude(),1);
lati=(双精度)user.get(0.getLatitude();
longi=(双精度)user.get(0.getLongitude();
adres=(字符串)user.get(0.getAddressLine(0);
Log.e(“数据”,“纬度:”+lati);
Log.e(“数据”,“长:”+longi);
Log.e(“数据”,“地址:”+adres);
}捕获(例外e){
e、 printStackTrace();
}
}
返回地址;
}
设备GPS已启用,但此功能始终返回“CustomLocation Not found”,但当我在手机中运行谷歌地图应用程序时,此功能正常工作。 我不明白这个错误的原因


如何修复它?

几乎不应该调用getLastKnownLocation。它只会在设备已经有位置的情况下返回结果,而通常没有。相反,请使用requestLocationUpdates或requestSingleUpdate并等待回调。

然后再次出现问题。RequestLocationUpdate和requestSingleUpdate在Android 7.0或更高版本上不起作用。我尝试添加google play服务,但android studio给出了愚蠢的“google play服务资源未找到”错误。但我在sdk管理器中选择了它。这完全是胡说八道。现在我无法以任何方式获取位置数据。谢谢谷歌