【问题标题】:MyLocationOverlay or LocationManager for updating current locationMyLocationOverlay 或 LocationManager 用于更新当前位置
【发布时间】:2012-07-05 17:54:58
【问题描述】:

我正在使用 MapView 在地图上显示用户的当前位置。要在用户移动时更新位置,我必须做出选择:

  • 我可以使用 MyLocationOverlay 绘制当前位置并将其扩展以允许跟踪移动中的用户位置并具有自定义标记。 MyLocationOverlay 的问题是我无法控制设备从 GPS 请求位置的频率。我担心这里的电池耗电。
  • 我可以使用位置管理器并使用 requestLocationUpdates 订阅以从 GPS 获取位置。在这里,我可以更好地控制查询 GPS 的频率。我可以连接一个 LocationListener 并在其中编写代码。

但我在 SO 上读到这里可能不是使用位置管理器的好方法,因此应该首选 MyLocationOverlay。

另外,考虑到我的应用是基于位置的应用,用户的位置应该在他移动时被跟踪。

人们能否建议哪种方法是最好的实施方法,并且对电池的影响相对较小。

请注意,我是 Android 的初学者,所以请原谅任何明显的错误。

提前谢谢你, 安迪

【问题讨论】:

  • GPS 供应商是强制性的吗?我的意思是你想要精确,对吧?
  • 是的,我想要精确。 GPS 的优先级低于网络位置。但我的问题仍然存在。
  • 好吧,你不能同时做到准确和高效。如果您需要准确的位置信息,请使用第一个变体(您自己提出)。
  • @bicska88 - 谢谢。我倾向于使用 MyLocationOverlay。但由于我们无法控制它查询 Providers 的频率,我不确定电池是否会消耗。

标签: android google-maps geolocation mylocationoverlay google-maps-mobile


【解决方案1】:

使用 Little Fluffy 位置 1º:

在清单中:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.location" android:required="true" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>


<Application...>
<service android:name="com.littlefluffytoys.littlefluffylocationlibrary.LocationBroadcastService" />

    <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" />

2º 创建类以扩展应用程序

public class YourApplication extends Application {
    public void onCreate(){
        super.onCreate();
        LocationLibrary.showDebugOutput(true);
        LocationLibrary.initialiseLibrary(getBaseContext(), 0, 2 * 60 * 1000, "com.yourpackage.broadcastpackage");      
    }

    public static Context getAppContext() {
        return ApplicationVexPromoter.context;
    }
}

3º 创建广播接收器

public class Broadcast extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
       final LocationInfo locationInfo = (LocationInfo) intent.getSerializableExtra(LocationLibraryConstants.LOCATION_BROADCAST_EXTRA_LOCATIONINFO);

    }
}

并使用:

在你的活动中:

public class YourActivity extends Activity {

LocationInfo info;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.id.yourview);
        info = new LocationInfo(getBaseContext());
        double latitude = info.lastLat;
        double longitude = info.lastLong;
    }
}

需要更多? Please refer this

为我工作!

【讨论】:

  • 我将其添加到我的代码中,但广播接收器从未被调用。我在上面的代码中没有看到任何引用BroadcastBroadcastReceiver 的地方。那套在哪里?
【解决方案2】:

我使用 Little Fluffy Location - 它是一个库,您可以设置更新时间或距离,该库制作广播接收器,实现 LocationListener,当位置更改时通知您的应用程序。

简单、快速、简单!

请参考this链接:

位置更改后,更新地图上的叠加层! =)

如果您需要,我会发送我的完整位置解决方案。

【讨论】:

  • 哥们,我能告诉我如何使用这个库吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2014-04-03
相关资源
最近更新 更多