赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 手持终端

首页 > 专业技术 > 手持终端 > Android系统的定位
Android系统的定位

GPS定位是移动设备的一个非常重要和有用的功能。Android系统提供了多种定位服务方式,包括GPS定位、网络定位等。Android系统的定位服务通过android.location软件包来实现,应用程序不但可以获取定位的位置数据,还可以获取参与定位的GPS卫星参数等信息。

1.LocationManager类:定位服务管理

LocationManager类位于android.location软件包中,是Android系统中最基本的定位服务。LocationManager类负责定位服务管理,包括获取定位数据、读取GPS状态等。Location Manager对象不需要实例化,而是通过获取系统服务来实现的。应用程序需要通过如下语句来获取LocationManager类对象:
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
另外,为了能够让应用程序获取定位服务的能力,程序中还需要在AndroidManifest.xml中添加服务权限:
<uses-permission android:name="android:permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android:permission.ACCESS_COARSE_LOCATION" />
Android模拟器提供了GPS定位的模拟能力,需要为模拟器添加GPS支持。在模拟器的Edit Android Virtual Device(AVD)对话框中点击New按钮,在打开的对话框中选择GPS support。
1)getLastKnownLocation方法:获取最新位置
该方法用于获取Android系统中最新保存的位置信息,返回值为Location类型,其中包含了经纬度等位置信息,程序中通过解析该返回值就可以获取位置信息。该方法获取的仅为最后一次得到的位置数据,该数据有可能已过期,并非当前时刻的位置。语法格式:
public Location getLastKnownLocation(String provider)
其中,参数provider为String字符串类型,表示指定的位置提供者。Android系统中,可以选择几种位置提供者:
·LocationManager.GPS_PROVIDER:位置信息由GPS提供
·LocationManager.NETWORK_PROVIDER:位置信息通过网络提供
·LocationManager.PASSIVE_PROVIDER:位置信息由特殊的设备提供,用得比较少。
示例:
public class firstActivity extends Activity{
LocationManager lm;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
double latitude;
double longitude;
String str="当前位置:\n";
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location=lm.getLastKnownLocation(
LocationManager.GPS_PROVIDER);
latitude=location.getLatitude();
longitude=location.getLongitude();
str=str+"纬度:"+latitude+"\n经度:"+longitude;
Toast.makeText(getApplicationContext(),str,Toast.LENGTH_LONG).show();
}
});
}
}
2)getAllProviders方法:获取所有位置提供者
该方法用于获取Android系统中的所有位置提供者,包括当前正在使用的以及没有使用的。该方法的返回值为String类型的List对象,包含了位置提供者的名称列表。Android系统中,可以选择GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_PROVIDER方式。语法格式:
public List<String> getAllProviders()
示例:
List<String> providers=lm.getAllProviders()
3)getProviders方法:获取可用位置提供者
该方法用于获取Android系统中可以使用的所有位置提供者。该方法的返回值为String类型的List对象,包含了可用位置提供者的名称列表。语法格式有两种:
public List<String> getProviders(boolean enabledOnly)
public List<String> getProviders(Criteria criteria,boolean enabledOnly)
其中,参数enabledOnly为true,表示仅获取可用的位置提供者;参数criteria表示筛选标准。第二种方法表示返回符号筛选标准的位置提供者,否则返回null。
4)isProviderEnabled方法:获取位置提供者是否使能
该方法用于获取Android系统中某个位置提供者是否使能,如果使能将返回true,否则返回false。在应用程序中往往通过该方法来获取当前采用的定位方式。语法格式:
public boolean isProviderEnabled(String provider)
5)getBestProvider方法:获取最佳的位置提供者
该方法用于获取Android系统符合筛选条件的最佳位置提供者,通过指定筛选条件来实现。该方法广泛地应用于选择定位方法的场合,例如可以根据定位精度、费用、是否需要速度和海拔等信息来进行筛选。语法格式:
public String getBestProvider(Criteria criteria,boolean enabledOnly)
其中,参数criteria为筛选条件,可以指定查询精度、费用、是否需要速度和海拔等信息;enabledOnly为true则表示仅获取符号条件的位置提供者。示例:
Cirteria cirteria=new Criteria();
cirteria.setAccuracy(Criteria.ACCURACY_COARSE);
cirteria.setSpeedRequired(false);
cirteria.setCostAllowed(false);
cirteria.setBearingRequired(false);
cirteria.setAltitudeRequired(false);
cirteria.setPowerRequirement(Criteria.POWER_LOW);
6)getProvider方法:指定位置提供者
该方法用于按照指定的名称获取一个位置提供者,返回值为LocationProvider类型。该方法常用于强制采用某种定位方式的场合。用户通过获取的对象还可以得到其对应的名称信息。语法格式:
public LocationProvider getProvider(String name)
其中,参数name为String类型,代表了指定的位置提供者的名称,可以为network、passive或gps,也可以通过LocationManager中的常量来提供。示例:
LocationProvider lp=lm.getProvider(LocationManager.GPS_PROVIDER);
Location location=lm.getLastKnownLocation(lp.getName());
7)requestLocationUpdates方法:请求位置更新
该方法用于向Android系统请求位置更新,当用户的位置更新时会及时获取最新的定位数据。该方法获得位置更新的方式可以有很多种,如监听器、Intent或Looper等。此外,还可以指定产生通知的最小时间间隔和最小距离,这样可以在一定程度上节省电量。
getLastKnownLocation方法用于主动地获取位置数据,但该数据并不一定代表实时的定位数据。requestLocationUpdates方法则是在位置更新时立刻获取位置数据,反映了当前的实时定位数据,实际应用中更为准确有效。语法格式有几种实现:
public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, Looper looper)
public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)
public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria, PendingIntent intent)
public void requestLocationUpdates (long minTime, float minDistance, Criteria criteria,  LocationListener listener, Looper looper)
其中,参数provider为位置提供者,可以根据需要选择gps、network或passive;minTime为位置更新的最小时间间隔;minDistance为位置更新的最小距离;listener为LocationListener监听器,应用监听位置的更新变化;looper为用于回调的Looper对象;intent为在每次位置更新时发送的PendingIntent对象;criteria为筛选机制,用于筛选位置提供者。示例:
public class firstActivity extends Activity{
public class LocListener implements LocationListener{
@Override
String str="当前位置:\n";
double latitude;
double longitude;
latitude=location.getLatitude();
longitude=location.getLongitude();
str=str+"纬度:"+latitude+"\n经度:"+longitude;
Toast.makeText(getApplicationContext(),str,Toast.LENGTH_LONG).show();
}
@Override
public void onProviderDisabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者被禁用!",
Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者已使能!",
Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider,int status,Bundle extras){
Toast.makeText(getApplicationContext(),"状态改变!",
Toast.LENGTH_LONG).show();
}
LocationManager lm;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String str="当前位置:\n";
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationProvider lp=lm.getProvider(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,new LocListener());
}
});
}
}
8)removeUpdates方法:移除位置更新请求
该方法用于移除Android系统的位置更新请求,当用户的位置更新时就不再获取最新的定位数据。该方法依赖于requestLocationUpdates方法,如果requestLocationUpdates方法使用的是监听器类型,则removeUpdates方法需要传递监听器参数;如果如果requestLocationUpdates方法使用的是PendingIntent类型,则removeUpdates方法需要传递对应的PendingIntent对象。语法格式有几种:
public void removeUpdates(PendingIntent intent)
public void removeUpdates(LocationListener listener)
其中,参数intent为用于监听位置更新变化的PendingIntent 对象;listener为用于监听位置更新变化的LocationListener监听器。
9)addGpsStatusListener方法:添加GPS状态监听器
该方法用于为应用程序添加GPS状态监听器。如果监听器添加成功将返回true,否则返回false。当Android手机接收到的GPS卫星状态发生改变时将触发该监听器。通过GPS状态监听器可以获取卫星的数量、强度、定位时间等信息。常见的GPS应用程序都广泛应用该方法来获取GPS卫星状态。语法格式:
public boolean addGpsStatusListener(GpsStatus.Listener listener)
其中,参数listener为GpsStatus.Listener监听器,应用程序中首先应该声明该监听器,然后才能通过addGpsStatusListener方法调用添加。
10)getGpsStatus方法:获取GPS状态
该方法用于获取GPS卫星的当前状态,返回值为GpsStatus类型,其中包含了Android手机接收到的GPS卫星的信息。常见的GPS类应用程序都广泛应用该方法来获取GPS卫星状态。getGpsStatus方法需要在监听器的onGpsStatusChanged方法中调用,这样能够确保GPS信息自动复制到GPS卫星状态对象中。语法格式:
public GpsStatus getGpsStatus(GpsStatus status)
其中,参数status为GPS卫星的状态对象,也可以设置为null,这样将返回一个新的GPS卫星状态对象。示例:
public class firstActivity extends Activity{
LocationManager lm;
LocationListener ll;
private GpsStatus gpsStatus;
private GpsStatus.Listener statusListener;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
final TextView tv1=(TextView)findViewById(R.id.textView1);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String str="当前位置:\n";
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
statusListener=new GpsStatus.Listener(){
@Override
public void onGpsStatusChanged(int event){
gpsStatus=lm.getGpsStatus(null);
switch(event){
case GpsStatus.GPS_EVENT_FIRST_FIX:
Toast.makeText(getApplicationContext(),"完成第一次定 位",Toast.LENGTH_LONG).show();
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Toast.makeText(getApplicationContext(),"卫星信息更新 ",Toast.LENGTH_LONG).show();
break;
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(getApplicationContext(),"GPS系统启动 ",Toast.LENGTH_LONG).show();
break;
case GpsStatus.GPS_EVENT_STOPPED:
Toast.makeText(getApplicationContext(),"GPS系统停止 ",Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
};
lm.addGpsStatusListener(statusListener);
ll=new LocationListener(){
@Override
public void onLocationChanged(Location location){
String str="当前位置:\n";
double latitude;
double longitude;
latitude=location.getLatitude();
longitude=location.getLongitude();
str=str+"纬度:"+latitude+"\n经度:"+longitude;
tv1.setText(str);
}
@Override
public void onProviderDisabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者被禁用!",
Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者已使能!",
Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider,int status,Bundle extras){
Toast.makeText(getApplicationContext(),"状态改变!",
Toast.LENGTH_LONG).show();
}
};
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,ll);
}
});
}
}
11)removeGpsStatusListener方法:移除GPS状态监听器
该方法用于移除Android系统的GPS状态请求,这样当Android手机接收到卫星状态改变时将不再更新状态信息。该方法往往应用于退出应用程序的场合,可以关闭GPS定位以节省电量。语法格式:
public void removeGpsStatusListener(GpsStatus.Listener listener)
其中,参数listener为前面已经绑定的GpsStatus.Listener监听器。示例:
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
lm.removeUpdates(ll);
lm.removeGpsStatusListener(statusListener);
Toast.makeText(getApplicationContext(),"移除定位监听器和GPS状态监 听!",Toast.LENGTH_LONG).show();
}
});

2.GpsStatus类:GPS状态

GpsStatus类位于android.location软件包,不同于获取位置数据,该类主要用于获取GPS引擎的状态。该类中的属性及方法需要结合GpsStatus.Listener监听器才能够使用。该类中提供了获取首次定位时间和获取GPS卫星状态的功能。
1)getTimeToFirstFix方法:获取首次定位时间
该方法用于获取最新的GPS引擎重新启动以来收到的首次定位所需的时间,以ms为单位。在空旷的地方定位时间比较短,在障碍物比较多的地方定位时间比较长。语法格式:
public int getTimeToFirstFix()
2)getMaxSatellites方法:获取最大卫星数量
该方法用于获取在卫星列表中可以返回的最大卫星数量,这个数量是getSatellites方法能够获得的最大卫星数量,并不代表当前实际获得的卫星数量。一般来说该返回值固定为255。语法格式:
public int getMaxSatellites()
3)getSatellites方法:获取GPS卫星状态
该方法用于获取GPS引擎的当前状态,该函数的返回值为一个GPSSatellite对象的数组,其中包含了卫星列表。应用程序中可以通过解析该返回对象来获取GPS卫星的状态。语法格式:
public Iterable<GpsSatellite> getSatellites()
该方法需要结合GpsSatellite类。

3.GpsSatellite类:GPS卫星

GpsSatellite类主要用于获取参与定位的GPS卫星的状态参数,包括方位角、高度角、伪随机数和信噪比等。该类中的方法需要结合GpsStatus类来使用。很多GPS应用程序都使用这些方法来获取参与定位的GPS卫星信息。
1)getAzimuth方法:获取方位角
该方法用于获取GPS卫星的方位角,返回值为float类型,方位角的取值范围为0~360度。应用程序可以使用该方法来获取Android手机接收到的GPS卫星的状态参数。语法格式:
public float getAzimuth()
2)getElevation方法:获取高度角
该方法用于获取GPS卫星的高度角,返回值为float类型,高度角取值范围0~90度。应用程序可以使用该方法来获取Android手机接收到的GPS卫星的状态参数。语法格式:
public float getElevation()
3)getPrn方法:获取伪随机数
该方法用于获取GPS卫星的伪随机数PRN,返回值为int类型。应用程序可以使用该方法来获取Android手机接收到的GPS卫星的状态参数。语法格式:
public int getPrn()
4)getSnr方法:获取信噪比
该方法用于获取GPS卫星传回的信噪比,返回值为float类型。应用程序可以使用该方法来获取Android手机接收到的GPS卫星的状态参数。语法格式:
public int getSnr()
示例:
public class firstActivity extends Activity{
LocationManager lm;
LocationListener ll;
private GpsStatus gpsStatus;
private GpsStatus.Listener statusListener;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final TextView tv1=(TextView)findViewById(R.id.textView1);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String str="当前位置:\n";
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
statusListener=new GpsStatus.Listener(){
@Override
public void onGpsStatusChanged(int event){
gpsStatus=lm.getGpsStatus(null);
Iterator<GpsSatellite> Iteratorsate;
switch(event){
case GpsStatus.GPS_EVENT_FIRST_FIX:
int utc;
utc=gpsStatus.getTimeToFirstFix();
String str;
str="完成首次定位,耗时"+utc+"毫秒";
Toast.makeText(getApplicationContext(),str,
Toast.LENGTH_LONG).show();
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Iterable<GpsSatellite> allSatellites;
allSatellites=gpsStatus.getSatellites();
Iteratorsate=allSatellites.iterator();
String info="GPS卫星状态:";
int i=0;
while(Iteratorsate.hasNext()){
GpsSatellite satellite=Iteratorsate.next();
info=info+" 方位角"+satellite.getAzimuth();
info=info+" 高度角"+satellite.getElevation();
info=info+" 信噪比"+satellite.getSnr();
info=info+" 伪随机数"+satellite.getPrn);
i=i+1;
}
tv1.setText(info);
break;
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(getApplicationContext(),"GPS系统启动 ",Toast.LENGTH_LONG).show();
break;
case GpsStatus.GPS_EVENT_STOPPED:
Toast.makeText(getApplicationContext(),"GPS系统停止 ",Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
};
lm.addGpsStatusListener(statusListener);
ll=new LocationListener(){
@Override
public void onLocationChanged(Location location){
String str="当前位置:\n";
double latitude;
double longitude;
latitude=location.getLatitude();
longitude=location.getLongitude();
str=str+"纬度:"+latitude+"\n经度:"+longitude;
}
@Override
public void onProviderDisabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者被禁用!",
Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者已使能!",
Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider,int status,Bundle extras){
Toast.makeText(getApplicationContext(),"状态改变!",
Toast.LENGTH_LONG).show();
}
};
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,ll);
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
lm.removeUpdates(ll);
lm.removeGpsStatusListener(statusListener);
Toast.makeText(getApplicationContext(),"移除定位监听器和GPS状态监 听!",Toast.LENGTH_LONG).show();
}
});
}
}
Android模拟器无法模拟GPS卫星参数,需要在Android手机上运行。

4.Location类:位置信息

Location类是android.location软件包中另一个重要的类,主要负责获取定位的位置信息。通过该类中的方法,可以从定位结果中解析出经度、纬度、海拔、速度、UTC时间、方位和精确度等信息。只要是涉及定位操作的应用程序都会用到该类。
1)getLatitude方法:获取纬度
该方法用于获取当前定位数据的纬度信息,返回值为double类型的数据。语法格式:
public double getLatitude()
2)getLongitude方法:获取经度
该方法用于获取当前定位数据的经度信息,返回值为double类型的数据。语法格式:
public double getLongitude()
3)getSpeed方法:获取速度
该方法用于获取当前定位数据的速度信息,返回值为float类型的数据。语法格式:
public float getSpeed()
4)getAccuracy方法:获取精确度
该方法用于获取当前定位数据的精确度信息,返回值为float类型的数据,以米为单位,反映了经度和纬度定位上的误差。语法格式:
public float getAccuracy()
5)getBearing方法:获取方位
该方法用于获取当前定位数据的方位信息,返回值为float类型的数据,方位以地理北为参考,取值范围0~360度。语法格式:
public float getBearing()
6)getTime方法:获取UTC时间
该方法用于获取当前定位数据的时间信息,返回值为long类型的数据,返回的时间是以1970年1月1日开始的UTC时间,以毫秒为单位。语法格式:
public long getTime()
7)getAltitude方法:获取高度
该方法用于获取当前定位数据的高度信息,返回值为double类型的数据。语法格式:
public double getAltitude()
8)getProvider方法:获取位置提供者
该方法用于获取当前定位数据的位置提供者,返回值为String类型的数据。Android系统中可以使用的位置提供者包括gps、network、passive三种。语法格式:
public String getProvider()
示例:
public class firstActivity extends Activity{
LocationManager lm;
LocationListener ll;
TextView tv1;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
tv1=(TextView)findViewById(R.id.textView1);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String str="当前位置:\n";
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationProvider lp=lm.getProvider(LocationManager.GPS_PROVIDER);
ll=new LocationListener(){
@Override
public void onLocationChanged(Location location){
String str="当前位置:";
str=str+"\n纬度:"+location.getLatitude();
str=str+"\n经度:"+location.getLongitude();
str=str+"\n速度:"+location.getSpeed();
str=str+"\n精确度:"+location.getAccuracy();
str=str+"\n方位:"+location.getBearing();
str=str+"\nUTC时间:"+location.getTime();
str=str+"\n高度:"+location.getAltitude();
str=str+"\n定位数据由:"+location.getProvider()+"提供";
tv1.setText(str);
}
@Override
public void onProviderDisabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者被禁用!",
Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String provider){
Toast.makeText(getApplicationContext(),"位置提供者已使能!",
Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider,int status,Bundle extras){
Toast.makeText(getApplicationContext(),"状态改变!",
Toast.LENGTH_LONG).show();
}
};
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,ll);
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
lm.removeUpdates(ll);
Toast.makeText(getApplicationContext(),"移除GPS状态监听!",
Toast.LENGTH_LONG).show();
}
});
}
}

5.Criteria类:筛选标准

Android系统提供了多种定位方式,包括GPS、网络等,系统还提供了Criteria类来筛选最佳的定位方式,也就是选择一个合理的位置提供者。
Criteria类依据定位精度、是否收费、是否需要速度、是否需要海拔和电量消耗等来进行筛选。一般来说,GPS定位精度高且免费,但首次定位速度慢、耗电大;网络定位速度快、省电,但精度不高,而且会产生一定的流量费用。
1)setAccuracy方法:设置定位精度
该方法用于设置定位精度。Android系统中可以指定高精度和低精度两种,定位精度越高,则需要消耗更多的电量和时间。语法格式:
public void setAccuracy(int accuracy)
其中,参数accuracy表示定位精度。Android系统中可以取如下两种值:
·ACCURACY_FINE:高精度,一般会采用GPS定位
·ACCURACY_COARSE:低精度,一般会采用网络定位
2)setSpeedRequired方法:设置是否需要速度
该方法用于设置定位数据是否需要速度信息。Android系统中的不同位置提供者并非都能提供速度信息,一般来说GPS能够提供速度信息。语法格式:
public void setSpeedRequired(boolean speedRequired)
其中,参数speedRequired表示是否需要获取速度信息,true表示需要获取速度,false表示不需要获取速度信息。
3)setCostAllowed方法:设置是否允许收费
该方法用于设置获取定位数据时是否允许产生费用。在Android系统中,GPS定位不会收费,而通过网络定位则会产生一定的流量费用。语法格式:
public void setCostAllowed(boolean costAllowed)
其中,参数costAllowed表示是否允许收费,true表示允许产生费用,false表示不允许产生费用。
4)setBearingRequired方法:设置是否需要方位
该方法用于设置获取定位数据时是否需要方位信息。在costAllowedAndroid系统中,GPS定位能够获取方位信息,而通过网络定位则一般不能获取方位信息。语法格式:
public void setBearingRequired(boolean bearingRequired)
其中,参数bearingRequired表示是否需要方位信息,true表示需要方位信息,false表示不需要方位信息。
5)setAltitudeRequired方法:设置是否需要海拔
该方法用于设置获取定位数据时是否需要海拔信息。在Android系统中,GPS定位能够获取海拔信息,而通过网络定位则一般不能获取海拔信息。语法格式:
public void setAltitudeRequired(boolean altitudeRequired)
其中,参数altitudeRequired表示是否需要海拔信息,true表示需要海拔信息,false表示不需要海拔信息。
6)setPowerRequirement方法:设置电量消耗
该方法用于设置获取定位数据时消耗的电量多少。在Android系统中,可以通过电量的消耗来筛选位置提供者。一般来说,GPS定位需要消耗的电量多,而网络定位需要消耗的电量较少。语法格式:
public void setPowerRequirement(int level)
其中,参数level表示电量消耗的等级。在Android系统中可以取值为:
·NO_REQUIREMENT:不需要消耗电量
·POWER_LOW:电量消耗低
·POWER_MEDIUM:电量消耗中等
·POWER_HIGH:电量消耗高
示例:
public class firstActivity extends Activity{
LocationManager lm;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String str,lp;
lm=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Criteria criteria=new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(false);
criteria.setBearingRequired(false);
criteria.setAltitudeRequired(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
lp=lm.getBestProvider(criteria,true);
str="符合条件的最佳位置提供者是:"+lp;
Toast.makeText(getApplicationContext(),str,Toast.LENGTH_LONG).show();
}
});
}
}

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659