前言
在开发 Android 位置相关应用时,可以从 GPS(全球定位系统)、passive、network 获取用户位置。通过 GPS 能获得最精确的信息。
LocationProvider 是位置源的意思,用来提供定位信息。
常用的 LocationProvider
方法名 | 描述 |
---|---|
passive | 被动定位方式,即利用其他应用程序使用定位更新了定位信息,系统会保存下来,该应用接收到消息后直接读取即可 |
gps | 通过手机里面的 GPS 芯片利用卫星获取定位信息 |
network | 通过网络获取定位信息。通常利用手机基站和 WIFI节点的地址来大致定位 |
LocationManager:该类提供系统定位服务访问功能。
LocationManager 提供的常用的方法
方法名 | 描述 |
---|---|
list getAllProviders() | 获取所有的 LocationProvider 列表 |
Location getLastKnowLocation(String provider) | 根据 LocationProvider 获取最近一次已知的 Location |
LocationProvider getProvider(String name) | 根据名称来获取 LocationProvider |
void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent) | 通过指定的 LocationProvider 周期性地获取定位信息,并通过 intent 启动相应的组件 |
void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) | 通过指定的 LocationProvider 周期性地获取定位信息,并触发 listener 所对应的触发器 |
LocationProvider:定位组件的抽象表示,通过该类可以获取该定位组件的相关信息。
LocationProvider 提供的常用方法
方法名 | 描述 |
---|---|
int getAccuracy() | 返回 LocationProvider 的精度 |
String getName() | 返回 LocationProvider 的名称 |
int getPowerRequirement() | 获取 LocationProvider 的电源需求 |
Location:该类表示特定时间地理位置信息,位置由经度、纬度、UTC时间戳以及可选的高度、速度、方向等组成。
Location 提供的常用方法
方法名 | 描述 |
---|---|
float getAccuracy() | 获取定位信息的精度 |
double getAltitude() | 获取定位信息的高度 |
float getBearing() | 获取定位信息的方向 |
double getLatitude() | 获取定位信息的纬度 |
double getLongitude() | 获取定位信息的经度 |
String getProvider() | 获取提供该定位信息的 LocationProvider |
float getSpeed() | 获取定位信息的速度 |
举例说明:获取所有可用的 Location Provider
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//获取显示 LocationProvider 名称的 TextView 组件
TextView textView = findViewById(R.id.text2);
//获取 location 服务
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//获取系统所有的 LocationProvider 名称
List<String> providerNames = locationManager.getAllProviders();
//使用 StringBuilder 保存数据
StringBuilder stringBuilder = new StringBuilder();
//遍历获取到的全部 Locationprovider 名称
for(Iterator<String> iterator = providerNames.iterator(); iterator.hasNext(); ) {
stringBuilder.append(iterator.next() + "\n");