Android Google Play服务基于位置的API工作流程

时间:2014-04-29 15:07:58

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

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

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

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

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

我对上述网址中代码的理解大致如下: -

  1. 在MainActivity类的onCreate()中,我们创建了一个LocationClient。 LocationClient用于连接位置服务。
  2. 现在在MainActivity类中的onStart()中,我们调用locationClientObjet.connect()。这意味着只要应用程序的MainActivity可见,就会尝试连接到位置服务。
  3. 在我们创建LocationClient之前,我们已经定义了一些名为Location Services CallBacks的东西。
  4. 因此,我们实现了所需的接口并定义了相应的方法。因此,例如,当连接客户端的请求成功完成时,将调用onConnected()。
  5.   

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

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

      请原谅我的无知。我是Android编程的新手,我正在努力学习清晰明了的概念。无论我出错或误解的地方,请纠正我。我尝试查看Vogella资源,但找不到多少帮助。任何能够解释细节的好资源都会使我的上述概念变得清晰,这将是很有帮助的。

1 个答案:

答案 0 :(得分:3)

  

问:CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000的用途是什么; >中的文档该页面显示: - 定义要发送到Google Play服务的请求代码。该代码是>在Activity.onActivityResult中返回。我不明白这一点。

答:CONNECTION_FAILURE_RESOLUTION_REQUEST是您定义的请求代码,如果MainActivity退出,onActivityResult会获取请求代码,一个以。即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服务问题的活动。结果如此      *调用返回此处,返回onActivityResult。      * /

  

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

答:从这里打电话:

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

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

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

  

问:onConnectionFailed()与错误片段之间的连接是什么。

答: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() AND 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);.
  

问:还有两种方法定义: - onActivityResult()和   servicesConnected()。我在某种程度上理解使用   servicesConnected() - 用于查看GooglePlay服务是否为   可用。它是用户定义的方法吗?它不是一样的   在回调方法onConnected()内部完成的事情,   onDisConnected()和onConnectionFailed()。如果不是他们怎么样   与servicesConnected()?

不同

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

我担心情况不一样,是通过isGooglePlayServicesAvailable()来检查Google Play服务是否可用。

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

  问:最后我只是不明白有什么用   onActivityResult(),我们到底想要做什么?

我希望从之前的答案中可以清楚地看出:)