首页 > 编程知识 正文

android 设置定位Android定位LocationManager的用法,华为怎么设置定位跟踪

时间:2023-05-03 19:20:26 阅读:207382 作者:1749

用户定位

LocationManager的作用:

1.获取用户的位置

2.追踪用户的移动

LocationManager的关键API

1.LocationManager:用于管理Android的用户定位服务

2.LocationProviders:提供多种定位方式供开发者选择。

<1>GPS

Provider

<2>Network Provider

定位方式的分类:

1.GPS定位:使用GPS卫星进行定位,需要在AndroidManifest.xml当中声明如下权限:

android.permission.ACCESS_FINE_LOCATION

2.NETWORK定位:使用信号接收塔和WIFI接入点进行定位,需要在AndroidManifest.xml当中声明如下权限:

android.permission.ACCESS_FINE_LOCATION

android.permission.ACCESS_COARSE_LOCATION

获取用户的当前位置:

1.在AndroidManifest.xml当中声明相应的权限;

2.获取LocationManager对象;

3.选择LocationProvider;

4.绑定LocationListener对象。

LocationListener有四个方法:

1.onLocationChanged(Location

location):当设备的位置发生改变时调用

我们可以调用location.getLongitude()和location.getLatitude()来得到设备所处的经度和纬度

2.onProviderDisabled(String

provider):当提供数据Provider禁用时调用

3.onProviderEnabled(String

provider):当提供数据的Provider使用时调用

4.onStatusChanged(String provider,int status,Bundle

extras):当状态改变时

我们需要实现LocationListener的以上四个方法:

private class TestLocationListener implements

LocationListener{

@Override

public void

onLocationChanged(Location location){

System.out.println(location.getLongitude());

System.out.println(location.getLatitude());

}

@Override

public void

onProviderDisabled(String provider){

// do something you need

}

@Override

public void

onProviderEnabled(String provider){

// do something you need

}

@Override

public void

onStatusChanged(String provider,int status,Bundle

extras){

// do something you need

}

}

下面假设我们以一个按钮来触发事件:

private class ButtonListener implements

OnClickListener{

@Override

public void

onClick(View v){

// 得到LocationManager对象

LocationManager locationManager =

(LocationManager)YourActivity.this.getSystemService(Context.LOCATION_SERVICE);

// requestLocationUpdates(String provider,long

minTime,float minDistance,LocationListener listener)

// 第一个参数,定义当前所使用的Location Provider

// 第二个参数,指示更新的最小时间,但并不是确定的,可能更多或更小

// 第三个参数,两次定位之间的最小距离,单位米。

// 第四个参数,监听器

LocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,new

TestLocationListener());

}

这样,我们就完成了一个简单的定位测试。

测试的时候,我们可以用到DDMS里的模拟器控制台,来向设备发送一个经纬度,以模拟卫星返回的定位数据。

那么有哪些Provider呢?

我们可以生成LocationManager对象,然后调用其public List

getAllProviders()方法,来返回所有的Provider,类型为List。

List providers =

locationManager.getAllProviders();

for(Iterator iterator =

providers.iterator();iterator.hasNext();){

String provider =

(String)iterator.next();

System.out.println(provider);

// and do something

you need

}

迭代器的使用就不再赘述了。

我们可以看到,打印输出的结果有:network,passive,gps。

其中主要用到的是network和gps。

那么我们怎样找到最佳的Location Provider呢?

Android给我们提供了一个查询功能的Criteria。

Criteria可以设置一系列的查询条件,用于查找当前设备当中符合条件的Location

Provider。

查询条件:

Android学习笔记--用户定位User Location

我们创建一个Criteria对象,然后调用上面的方法进行条件设定。

然后Android系统就会根据我们的设定条件去得到符合我们设定的条件的最佳的Location

Provider。

比如我们用一个按钮来做这样的测试,其监听器实现如下:

private class BestProviderButtonListener implements

OnClickListener{

@Override

public void

onClick(View v){

// 生成一个Criteria对象

Criteria criteria = new Criteria();

// 设置查询条件

criteria.setAccuracy(Criteria.ACCURACY_FINE); //

设置准确而非粗糙的精度

criteria.setPowerRequirement(Criteria.POWER_LOW); //

设置相对省电而非耗电,一般高耗电量会换来更精确的位置信息

criteria.setAltitudeRequired(false); //

不需要提供海拔信息

criteria.setSpeedRequired(false); //

不需要速度信息

criteria.setCostAllowed(false); //

不能产生费用

// 第一个参数,传递criteria对象

//

第二个参数,若为false,在所有Provider中寻找,不管该Provider是否处于可用状态,均使用该Provider。

// 若为true,则在所有可用的Provider中寻找。比如GPS处于禁用状态,则忽略GPS

Provider。

String provider =

locationManager.getBestProvider(criteria,false);

System.out.println("Best

provider-->"+provider);

}

}

那么怎么追踪设备位置呢?

我们可以使用void

android.location.LocationManager.requestLocationUpdates(String

provider,long minTime,float minDistance,LocationListener

listener)

我们说过,minTime是两次更新设置位置的最短时间,minDistance是两次更新设置位置的最小距离。

比如,先创建一个LocationManager对象,然后调用

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,5000,5000,new

TestLocationListener());

则表示最少5000毫秒,或是设备位移大于等于5000米时才会更新位置。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。