如何将 Google 位置 API 与 android Marshmallow 运行时权限系统集成?

How to integrate Google Location API with android Marshmallow runtime permissions system?

我正在尝试使用 Google 位置 API 在我的 Activity 中获取用户的位置。我有一个按钮,如果用户点击该按钮,则应检索用户的位置并将其发送到应用程序后端。 根据 Google 的文档,

LocationServices.FusedLocationApi
                        .getLastLocation(apiClient)

方法必须在onConnected方法中调用。但是,如果我没有检查用户授予的权限,该方法会抛出错误。

我的问题是我在按钮的 onClick 方法中请求许可。

我试过

LocationServices.FusedLocationApi
                        .getLastLocation(apiClient)

onClick 方法中,但它 returns 是一个空对象。

是否有一种正确的方法可以通过点击按钮而不是 activity 的 onCreate 方法来请求用户的位置许可,并且仍然能够获取用户的位置?

我假设你打电话给:

mGoogleApiClient.connect();

onStart() 中。当 activity 启动时调用 onConnected() 方法。在询问 运行 次位置许可后,您可以在 Button Click 上调用它。然后你就可以在 onConnected()getLastLocation() 并且你不会面临权限错误。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                   if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)){
                        mGoogleApiClient.connect();
                    }
                    else{
                        // ask run-time permission
                    }
                }
            }
        });

希望这对您有所帮助。