当前位置: 首页 > 知识库问答 >
问题:

FusedLocationClient为一些用户返回空值

司宏伯
2023-03-14

在我的Android应用程序中,我目前正在使用融合位置提供程序api(见下面的代码)来获取用户的位置,并且我对我的应用程序无法在应用程序中获取他们自己的位置有一些罕见的抱怨。

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(LOCATION_INTERVAL);
    mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);

    if ( ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED ) {
        mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                if (locationResult == null) {
                    return;
                }
                if(locationResult.getLastLocation() != null)
                    currentLocation = locationResult.getLastLocation();
            }
        };
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback,null);
        locationOn = true;
    }

经过一些检查,它似乎有时会在一段时间(或永远)内继续返回空值,而我的应用程序将无法工作。其他GPS应用程序也可以正常工作(例如谷歌地图)。

我的实现是正确的,还是像Google Play服务被置于电池节省模式这样的外部功能?

共有1个答案

申屠瀚海
2023-03-14

您所做的是正确的,但位置提供程序有时会返回null。您可能必须正确处理它。如果您想手动获取位置,请使用LocationManager

从我的代码中尝试这个片段(在我想要的位置,我永远不会得到空值,因为它至少会返回最后一个位置,或者正确地向用户显示错误消息以及如何解决它。)

private void updateLocations(){

 String str_latitude = "";

 String str_longitude = "";

 String provider = "";

    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

        provider = LocationManager.GPS_PROVIDER;

    } else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {

        provider = LocationManager.NETWORK_PROVIDER;
    }

    if (!provider.equals("")) {

        mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);

        @SuppressLint("MissingPermission") Task locationResult = mFusedLocationProviderClient.getLastLocation();

        locationResult.addOnCompleteListener(MainActivity.this, new OnCompleteListener() {

            @Override
            public void onComplete(@NonNull Task task) {
                if (task.isSuccessful()) {

                   Location mLastKnownLocation = (Location) task.getResult();

                    if (mLastKnownLocation != null) {

                        str_longitude = String.valueOf(mLastKnownLocation.getLatitude());

                        str_latitude = String.valueOf(mLastKnownLocation.getLongitude());

                        Toast.makeText(context, "Lat: "+str_latitude + ", Long " + str_longitude, Toast.LENGTH_LONG).show();
                    }

                    if (str_latitude.equals("") || str_longitude.equals("")) {

                        Snackbar.make(coordinatorLayout, "Couldn't find location, please try again in a moment", Snackbar.LENGTH_LONG).show();
                    }
                }
            }
        });


    } else if (provider.equals("")) {

        Snackbar snackbar = Snackbar.make(coordinatorLayout, "Seems like all providers of device are disabled", Snackbar.LENGTH_LONG);

        snackbar.setAction("Enable", new View.OnClickListener() {

            @Override
            public void onClick(View v) {
            //Takes user to gps enable settings.
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        });

        snackbar.show();
    }

}});
 类似资料:
  • 空结果如下所示: 非空结果(所需结果)如下所示: 我有这个函数,它应该获取“. flac”文件并将其转换为文本。出于某种原因,只有这两个示例“. flac”文件在通过Google Speech API时返回字符串,其他flac文件返回EMPTY结果。这些人遇到的同样问题:链接 这是我所有的flac文件:链接 <代码>我的。flac和此\u is\u a\u测试。flac工作得很好,google语音

  • 你好,我有一个问题与elasticsearch php api,Elastica。 如果我运行这个: 我得到0个结果

  • 我正在做一个练习游戏。 我有一个Spring引导/Maven项目连接到MySQL数据库。我能够设置一个api,它只是从我的“所有谜语”表中检索所有内容。它以前工作过,但是现在api返回一个json,其中一些键的值为空。我唯一玩的是Spring引导文件上的application.properties。我在spring.jpa.hibernate.ddl的“更新”和“无”之间跳跃。我到底做错了什么?

  • 问题内容: 我有以下MySQL查询,该查询应该返回表a和b中的记录(一对多关系),以及用逗号分隔的列表,其中列出了从表c返回的任何值。但是,表c中不会总是有记录(这就是为什么我使用LEFT OUTER JOIN将其联接到表a中的原因)。 上面的查询应返回2时返回1条记录。记录1在表c中具有3条匹配记录,记录2在表c中具有0条匹配记录。 查询返回: 如果删除GROUP_CONCAT和GROUP_BY

  • 我得到了ClassCastException。我正在遵循这个答案,但没有得到正确的答案。将对象转换为通用类型以返回 BubbleSort.java MainPorgram.java 安慰 线程“main”Java . lang . classcastexception中出现异常:无法转换[ljava . lang . object;to [I at java.lang.Class.cast(未知来

  • 我试图将mysql查询的结果作为json返回,但是json_encode函数总是返回空白,尽管数组包含元素。 检索查询并转换为php数组: 然后返回结果: 这不返回任何内容,而我在回显以下语句时确实得到了结果: 返回“数组” 返回“Youreka!demo” 你知道我做错了什么吗? ID:2,名字:尤瑞卡!演示,地址:Italiëlei 26,邮政编码:2000,城市:Antwerpen,国家:B