MyLocationOverlay或LocationManager用于更新当前位置

时间:2012-07-05 10:28:36

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

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

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

但是我在这里看到,使用位置管理器可能不是一个好方法,而且MyLocationOverlay应该优先于此。

此外,请考虑我的应用是基于位置的应用,应该在用户移动时跟踪用户的位置。

人们可以建议哪种方法最佳实施,对电池的影响相对较小。

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

提前谢谢你, 安迪

2 个答案:

答案 0 :(得分:2)

我使用Little Fluffy Location - 它是一个库,你设置更新或距离的时间,这个库创建一个广播接收器,实现LocationListener,n在位置变化时通知你的应用程序。

简单,快速,简单!

请参阅this链接:

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

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

答案 1 :(得分:1)

使用小蓬松位置 1º:

in Manifest:

<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

适合我!