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

位置为空融合位置提供商android

冷越泽
2023-03-14

我正在检查移动设备上是否启用了位置服务,如果是,请监听构建GoogleAppClient并监听位置更改。我面临的问题是,一旦在mobile中打开位置并重新启用,我就无法获得位置(纬度/长)。位置始终为空。

isLocationEnabled检查位置是否已打开

            if (isLocationEnabled(getApplicationContext())) {
                mMenu.getItem(0).setVisible(true);
            }
            else {
                Snackbar.make(mLayout, getString(R.string.loc_not_enable),
                        Snackbar.LENGTH_LONG).show();
            }
        }
    });
    //setup GoogleApiclient
    buildGoogleApiClient();


 public static boolean isLocationEnabled(Context context) {
    int locationMode = 0;
    String locationProviders;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
        } catch (SettingNotFoundException e) {
            e.printStackTrace();
            return false;
        }
        return locationMode != Settings.Secure.LOCATION_MODE_OFF;

    }else{
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return !TextUtils.isEmpty(locationProviders);
    }
}


private synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
}

@Override
protected void onStart() {
    // Connect the client.
    super.onStart();
    if (mGoogleApiClient != null) {
        mGoogleApiClient.connect();
    }
}

@Override
protected void onStop() {
    // Disconnecting the client invalidates it.
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onConnected(Bundle bundle) {
    if (ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_LOCATION);
    } else {
        startLocationServices();

    }
}

private void startLocationServices() {
    try {
        LocationRequest mLocationRequest = LocationRequest.create();
        Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
        if (mLastLocation==null){
            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        } else {
            Log.d("mLastLocation", String.valueOf(mLastLocation));
            lat = String.valueOf(mLastLocation.getLatitude());
            lon = String.valueOf(mLastLocation.getLongitude());
        }
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(10*1000); // Update location every 10 seconds
        mLocationRequest.setFastestInterval(1 * 1000);
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
    } catch (SecurityException exception) {
        exception.printStackTrace();
    }
}


   E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.my.game.wesport, PID: 30629
              java.lang.NumberFormatException: empty String
                  at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1071)
                  at java.lang.Double.parseDouble(Double.java:547)
                  at com.my.game.wesport.MapsActivity.onMapReady(MapsActivity.java:161)
                  at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source)
                  at com.google.android.gms.maps.internal.zzt$zza.onTransact(Unknown Source)
                  at android.os.Binder.transact(Binder.java:499)
                  at zu.a(:com.google.android.gms.DynamiteModulesB:82)
                  at maps.ad.t$5.run(Unknown Source)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6077)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

共有1个答案

谢昂雄
2023-03-14

重新启动手机后,问题得到了解决。

 类似资料:
  • 这就是我如何注册我的应用程序来接收位置更新: 我悬而未决的意图几乎在所要求的时间间隔内被后台调用... 到目前为止还好。 问题:当WIFI被禁用/没有连接到任何网络,或者当没有3G/4G网络数据启用-融合位置提供商没有提供新的位置更新!! 我的位置访问设置打开,并检查GPS卫星和WI-FI和移动网络位置。 更大的问题是:有时在这种情况下,我确实通过挂起的意图接收位置更新回调,但它知道最后的位置(即

  • 我一直在尝试使用andriod中的融合位置应用程序接口获取位置(lat/lon)。当wifi和gps都打开时,我的代码运行良好。如果我关闭gps,那么我不会得到任何位置更新。 我正在使用BALANCED_POWER_ACCURACY进行位置请求。我在清单中添加了Access_FINE_Location权限,并在我的build.gradle文件中使用了播放服务版本9.2.1。 我正在真实设备上进行测

  • 我在MainActivity类中有一个提供纬度和经度值的融合位置提供程序代码,它使用persistableBundle传递给JobService类。当用户使用应用程序时,它工作正常(即应用程序位于前台)。一旦应用程序被刷出或销毁,MainActivity的最后更新值就会一直通过作业调度器重复上传(即,作业调度器始终获得相同的值,融合的位置提供程序不工作)。即使应用程序不在前台,我应该怎么做才能使其

  • 我一直在尝试获取我当前的位置更新,并按照Google的建议使用了融合位置提供商,但我无法获得任何更新。我在网上彻底搜索了,但找不到任何解决方案。融合提供商返回的位置甚至不接近我所在的位置,它显示了其他一些国家。有人能在这里帮我吗?

  • 我想通过Android LocationManager API使用fused location provider,因为: 我不想让应用程序Phonelocator依赖于google play服务 现有的实现已经在工作和测试 看起来这是可能的。只需将字符串“融合”作为安装了google play服务的手机上的位置提供程序传递即可。 我想选择使用优先级高精度配置文件。我怀疑,默认情况下,它没有被使用。

  • 问题内容: 介绍 在我的应用中,我想一次性获得用户当前所在位置的准确位置。当我有时使用时,该位置将为null或已过时,因为我发现这只是获取缓存的位置,并且不请求更新位置。 解决方案是只请求一次位置更新,如下所示。 现在,我一直可以得到更准确的位置。 我的问题 如何确定位置更新是否失败?由于我只要求1。 获取位置更新后,将调用此回调 但是,如果位置更新失败,则不会调用此方法。 我尝试过的 我看到有一