【问题标题】:How to integrate Google Location API with android Marshmallow runtime permissions system?如何将 Google Location API 与 android Marshmallow 运行时权限系统集成?
【发布时间】:2017-04-02 18:10:01
【问题描述】:

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

LocationServices.FusedLocationApi
                        .getLastLocation(apiClient)

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

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

我试着放了

LocationServices.FusedLocationApi
                        .getLastLocation(apiClient)

onClick 方法中,但它返回一个空对象。

是否有适当的方法可以通过点击按钮而不是在活动的onCreate 方法中向用户询问位置许可,并且仍然能够获取用户的位置?

【问题讨论】:

  • “但是,如果我没有检查用户授予的权限,该方法会抛出错误”——如果你没有在那里检查权限,你可能会在 IDE 中收到警告。这只是一个 IDE 警告。只要您确定在此之前检查运行时权限,就可以了。

标签: android android-6.0-marshmallow android-permissions google-location-services


【解决方案1】:

我假设你在打电话:

mGoogleApiClient.connect();

onStart()。活动开始时调用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
                    }
                }
            }
        });

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2016-07-16
    • 1970-01-01
    • 2016-09-04
    • 2016-03-13
    相关资源
    最近更新 更多