与FusedLocationApi.requestLocationUpdates()相关的奇怪行为

时间:2016-09-05 02:38:55

标签: java android google-maps

我正在编写一个Android应用程序,并且有一个与FusedLocationApi.requestLocationUpdates()相关的奇怪行为,我在SO上搜索过,其他相关问题都没有解决我的问题。

显然,requestLocationUpdates不会一直触发onLocationChanged()方法;我之所以这样说是因为我在每次运行时都在模拟器上清理应用程序的数据,有时会触发onLocationChanged(),有时则不会(大多数情况下,如第二次运行应用程序而无需清理应用程序的数据)或者在制作用户数据后擦除ie)

下面你可以找到我的代码(来自pastebin的链接,我不想在这里创建任何视觉过载)

主要活动:http://pastebin.com/XiRrcR11

MapHandler:http://pastebin.com/HELnhaxy

另一个问题是,奇怪的是,如果我在方法displayLocation()中使用MapHandler中的匿名内部类,该应用程序可以正常工作,但是如果我使用扩展LocationListener的外部类,则应用程序的行为不正确

我知道SO中预期的问题级别很高,但我开始研究Android开发,这个问题让我睡不着觉

这是我的AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.trackit.app.track_it_v002">

    <!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or   fine
         location permissions for the 'MyLocation' functionality. 
    -->

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"  />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!--
         The API key for Google Maps-based APIs is defined as a string     resource.
             (See the file "res/values/google_maps_api.xml").
             Note that the API key is linked to the encryption key used to sign the APK.
             You need a different API key for each encryption key, including the release key that is used to
             sign the APK for publishing.
             You can define the keys for the debug and release targets in src/debug/ and src/release/. 
        -->
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity
            android:name=".MapsActivity"
            android:label="@string/title_activity_maps">
            <intent-filter>
            <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

你们能帮我一把吗?

编辑:经过一些调试我发现requestLocationUpdates没有返回非null对象并且没有触发onLocationChanged(),任何人都知道为什么? = S

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题。 mGoogleApiClient对象,需要在requestLocationUpdates时连接。这是通过从onConnected回调中请求LocationUpdates来解决的。

/*
 * Called first time google client is connected
 */
@Override
public void onConnected(@Nullable Bundle bundle) {
    Log.v(LOG_TAG,"DetectDrivingService - onConnected");

    // Create
    try {
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
    }
    catch(SecurityException se){

    }
}