6

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

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

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

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

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

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

提前谢谢你,安迪

4

2 回答 2

2

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

简单,快速,容易!

请参考这个链接:

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

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

于 2012-11-21T13:50:17.123 回答
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;
    }
}

需要更多? 请参考这里

为我工作!

于 2012-11-26T15:50:32.837 回答