第十章:基于位置的服务
一.显示地图
在Android应用中使用Google地图并且通过编程执行以下任务:
改变谷歌地图的视图
在Google地图中获取位置的纬度和经度
执行地址编码与反向地址编码(将地址与经纬度互相转换)
package com.jfdimarzio.lbs;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.jfdimarzio.lbs.MapsActivity" />
二.获取位置和数据
可以非常容易的使用GPS接收器找到你的位置,然而GPS需要工作在晴朗的天气而无法工作在室内或者任何卫星信号无法穿透的地方
另一个有效的方法是通过cell tower triangulation(信号塔三角测量技术)定位。第三种定位方法:依靠Wi-Fi三角测量技术
在Android平台上,SDK提供了LocationManager类帮助设备确定用户物理位置。
三.位置监控
LocationManager类有一个非常有趣的功能,他能监控一个特定的位置。该功能通过调用addProximityAlter()方法实现。