【问题标题】:Android Google Play Services Location Based APIs workflowAndroid Google Play 服务基于位置的 API 工作流程
【发布时间】:2014-04-29 15:07:58
【问题描述】:

我是安卓编程新手。我打算制作一个对位置敏感的应用程序。

我正在尝试使用 Google Play 服务的基于位置的 API 来检测用户的当前位置。为此,我一直在关注示例代码和此处给出的详细信息:-

developer.android.com- detect user's current location- Location APIs- Google Play Services

我试图了解检测用户当前位置所涉及的不同方法调用之间的联系。现在上面的链接虽然似乎有很多信息,但作为一个新手,我发现这里很难连接不同的方法调用。

所以我对上述 URL 中的代码的理解大致是这样的:-

  1. 在 MainActivity 类的 onCreate() 中,我们创建了一个 LocationClient。 LocationClient 用于连接到位置服务。
  2. 现在在 MainActivity 类中的 onStart() 中,我们调用 locationClientObjet.connect()。所以这意味着每当应用的 MainActivity 变得可见时,都会尝试连接到位置服务。
  3. 现在,在我们创建 LocationClient 之前,我们已经定义了一些称为位置服务回调的东西。
  4. 所以我们实现了所需的接口并定义了各自的方法。例如,当连接客户端的请求成功完成时,会调用 onConnected()。

到目前为止,一切听起来都不错。当我尝试将上述部分与以下提到的部分连接时出现问题:-

  1. 现在,甚至在我们定义定位服务回调之前,我们已经在 MainActivity 类中定义了一个内部类,称为 ErrorDialogFragment。我猜这个类是用来创建一个错误片段(比如一个警告框),它可以向用户显示错误消息,以防显然由于某种原因与定位服务的连接尝试失败。所以这里有些东西我不明白:-
  • CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000 有什么用;页面中的文档说:-定义发送到 Google Play 服务的请求代码。此代码在 Activity.onActivityResult 中返回。我不明白这个。
  • ErrorDialogFragment 类中的 onCreateDialog() 何时被调用。我在上面提到的 URL 页面上提到的示例代码中的任何地方都没有找到对此方法的显式调用。
  • onConnectionFailed() 和错误片段之间有什么联系。
  • 定义了另外 2 个方法:- onActivityResult() 和 servicesConnected()。我在一定程度上了解 servicesConnected() 的使用 - 它用于查看 GooglePlay 服务是否可用。它是用户定义的方法吗?它与在回调方法 onConnected()、onDisConnected() 和 onConnectionFailed() 中所做的事情不同吗?如果不是,它们与 servicesConnected() 有何不同?
  • 最后我只是不明白 onActivityResult() 有什么用,我们到底想在这里做什么?

请原谅我的无知。我对 Android 编程完全陌生,正在努力学习清晰而合理的概念。请在我出错或误解的地方纠正我。我尝试浏览 Vogella 资源,但找不到太多帮助。任何能解释清楚我上述概念的细节的好资源都会有很大帮助。

【问题讨论】:

  • 如果您认为我的回答解决了您的问题,您可以接受。

标签: android location google-play-services location-aware


【解决方案1】:

问:CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000有什么用; > 页面中的文档说: - 定义发送到 Google Play 服务的请求代码。此代码 > 在 Activity.onActivityResult 中返回。我不明白这个。

A : CONNECTION_FAILURE_RESOLUTION_REQUEST 是你定义的请求代码,如果 MainActivity 退出,onActivityResult 获取请求代码,一个开始。 IE 。 CONNECTION_FAILURE_RESOLUTION_REQUEST(或 USER_DEFINED_REQUEST_CODE) 这由 startActivityForResult(Intent,) 指定。这是通过

connectionResult.startResolutionForResult(this,CONNECTION_FAILURE_RESOLUTION_REQUEST);

它本身在内部调用 startActivityForresult

用法在给出的示例代码'MainActivity.java'中以注释的形式在定义onActivityResult之前指定。此处引用如下:

/* * 处理由其他开始的活动返回给这个活动的结果 * startActivityForResult()。特别是,方法 onConnectionFailed() 在 * LocationUpdateRemover 和 LocationUpdateRequester 可以调用 startResolutionForResult() 来 * 启动一个处理 Google Play 服务问题的 Activity。这个结果 * 这里调用返回到onActivityResult。 */

问:ErrorDialogFragment 类中的 onCreateDialog() 何时被调用。我没有 > 在上面提到的 URL 页面中提到的示例代码中的任何地方找到对此方法的显式调用。

A:从这里调用:

// 在DialogFragment中显示错误对话框

errorFragment.show(getSupportFragmentManager(),
                    "Location Updates");

onCreateDialog 将对话框添加到对话框缓存中,show 方法调用它。

问:onConnectionFailed() 和错误片段之间有什么联系。

A:onConnectionFailed 是一个回调方法,当客户端连接到 google play 服务出错时调用。错误列表可在以下位置找到 http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html 在“摘要”部分。

现在,如果发生错误并且有一些解决方法,错误片段将尝试解决它。看着 http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html#hasResolution()http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html#startResolutionForResult(android.app.Activity, int)

这里的“this”是指MainActivity,CONNECTION_FAILURE_RESOLUTION_REQUEST是用户定义的请求代码,由startActivityForResult调用,这里是隐式调用的

connectionResult.startResolutionForResult(
                        this,
                        CONNECTION_FAILURE_RESOLUTION_REQUEST);.

问:定义了另外 2 个方法:- onActivityResult() 和 服务连接()。我在一定程度上理解 servicesConnected() - 用于查看 GooglePlay 服务是否 可用的。它是用户定义的方法吗?不一样吗 在回调方法 onConnected() 中执行的操作, onDisConnected() 和 onConnectionFailed()。如果不是,他们怎么样 与 servicesConnected() 不同?

答:是的 servicesConnected 是用户定义的方法。

恐怕不一样,是通过isGooglePlayServicesAvailable()检查google play服务是否可用。

另一方面,OnConnected() 将在 isGooglePlayServicesAvailable 返回 true 后调用。因此它们在服务连接或断开后执行,servicesConnected() 只是检查它是否已连接。

问:最后我就是不明白有什么用 onActivityResult(),我们到底想在这里做什么?

我希望从以前的答案中可以清楚:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多