0

我正在尝试使用Little Fluffy Location Library来获取我的小应用程序的位置信息。我让它在一个异步进程中运行,如下所示:

    private class ShowLocationTask extends AsyncTask<Void, Void, Boolean> {
        @Override
        protected Boolean doInBackground(Void... params) {
            //LocationLibrary.forceLocationUpdate(getApplicationContext());
            latestInfo = new LocationInfo(getBaseContext());
            latestInfo.refresh(getBaseContext());

            lat = latestInfo.lastLat;
            lng = latestInfo.lastLong;

            return true;
        }

        protected void onPostExecute(Boolean result) {
            if (result != true) {
                Toast.makeText(ACTIVITY.this,
                        "Cannot get your location...", Toast.LENGTH_LONG)
                        .show();
            } else {

                Date date = new Date(latestInfo.lastLocationUpdateTimestamp);

                Toast.makeText(ACTIVITY.this,
                        "Last Updated: " + date, Toast.LENGTH_LONG).show();
                LatLng meLoc = new LatLng(lat, lng);
                CameraPosition cameraPosition = new CameraPosition.Builder()
                        .target(meLoc) // Sets the center of the map to
                        .zoom(ZP).bearing(0).tilt(80).build();
                map.animateCamera(CameraUpdateFactory
                        .newCameraPosition(cameraPosition));
                Toast.makeText(ACTIVITY.this,
                        "..." + lat + " : " + lng, Toast.LENGTH_LONG).show();
                Log.e("LATLON", lat + " : " + lng);
            }
        }

    }

我在我的 onCreate() 中调用它。

userLoc.execute();

我用这个类扩展了我的应用程序:

公共类 FluffyLocation 扩展应用程序 {

@Override public void onCreate() { super.onCreate();

  LocationLibrary.showDebugOutput(true);

  try {           LocationLibrary.initialiseLibrary(getBaseContext(), 0,
              2 * 60 * 1000, "com.jasonflaherty.snoteldata");         } catch (UnsupportedOperationException ex) {            Log.d("Application",
              "UnsupportedOperationException thrown - the device doesn't have any location providers");       }   }

}

清单中的设置:

    <receiver
        android:name="com.littlefluffytoys.littlefluffylocationlibrary.StartupBroadcastReceiver"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <receiver
        android:name="com.littlefluffytoys.littlefluffylocationlibrary.PassiveLocationChangedReceiver"
        android:exported="true" />

我知道它正在运行,因为每次活动运行时我都会让 TOAST 显示信息......我试图在每次用户打开应用程序时获取当前位置。我想我错过了这是如何工作的。我在想 latestInfo.refresh() 会给我最新的信息,但是,如果我搬到 200 米外的另一个位置,我仍然会得到相同的 lat/lng 和相同的 .lastLocationUpdateTimestamp。

我想获取当前用户位置,然后定期获取更新。由于这个原因,这个库似乎很完美......但我没有得到结果。我没有正确实施吗?

编辑::::

我没有实现广播接收器,但是,我不确定如何让它为多个类工作。我有 3 个不同的会询问用户位置...

4

1 回答 1

1

refresh() 方法只是更新当前的 latestInfo 对象。你需要要求更新。

LocationLibrary.forceLocationUpdate(MainActivity.this);

你需要让 libary 几秒钟来获取当前位置。然后你可以打电话

latestInfo.LastLat

并展示。

为库实现广播让您可以访问 OnLocationChanged 方法,当库的 LocationListenner 获得新位置时调用该方法。

    public class FluffyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("FluffyBroadcastReceiver", "onReceive(): received location update");

    final LocationInfo locationInfo = (LocationInfo) intent.getSerializableExtra(LocationLibraryConstants.LOCATION_BROADCAST_EXTRA_LOCATIONINFO);
  //do something whit the new location        
    doSomething(String.valueOf(locationInfo.lastLong),String.valueOf(locationInfo.lastLat),String.valueOf(locationInfo.lastAccuracy));
 }
}

在清单文件中你必须定义这个接收器

<receiver android:name="com.YOURPACKAGE.FluffyBroadcastReceiver" android:exported="true" />
于 2014-06-13T05:29:36.287 回答