1

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

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

developer.android.com- 检测用户当前位置- 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 资源,但找不到太多帮助。任何解释细节的好资源都会使我的上述概念变得清晰,这将是很大的帮助。

4

1 回答 1

3

问: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

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

/* * 处理由其他以 startActivityForResult() 开始的活动返回给此活动的结果。特别是, * LocationUpdateRemover 和 LocationUpdateRequester 中的 onConnectionFailed() 方法可能会调用 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()。我在一定程度上理解 servicesConnected() 的使用 - 它用于查看 GooglePlay 服务是否可用。它是用户定义的方法吗?它与在回调方法 onConnected()、onDisConnected() 和 onConnectionFailed() 中所做的事情不同吗?如果不是,它们与 servicesConnected() 有何不同?

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

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

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

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

我希望从以前的答案中可以清楚地看到这一点:)

于 2014-05-04T12:09:28.960 回答