Android应用程序开发之跟踪位置变化
2012-02-22 15:04
429 查看
开发位置相关的Android应用程序时,可以选择使用不同的技术来获取当前位置,如通过GPS或网络等等,对于不同的技术,精确度、耗电量、产生的费用都是不同的,本文将详细介绍Location Provider的相关内容。
要获得一个特定的Location Provider的实例对象,可使用如下方法:
LocationProvider provider = locationManager.getProvider(providerName);
这里的providerName是一个字符串,最常见的providerName是以下的两种,分别对应GPS和网络:
LocationManager.GPS_PROVIDER
LocationManager.NETWORK_PROVIDER
但是,可用的Location Provider不仅仅只有这两种,通过以下的方法,可以获取当前硬件上所有可用的Location Provider:
如果不确定哪种获取位置的方式是最最好的,可以借助Criteria类,告知所需的条件,让Android决定应该使用哪种技术,具体方式如下:
在选择好合适的Location Provider之后,就可以进行下一步的开发工作了。
要在应用程序中使用位置相关服务,先要在对应的AndroidManifest添加一些uses-permission标签,如下:
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION”/>
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION”/>
注:使用GPS时需要ACCESS_FINE_LOCATION,使用Network时需要ACCESS_COARSE_LOCATION。
在Android应用程序中,位置相关的服务是通过Location Manager来处理的,获取Location Manager的实例对象可以用以下方法:
String serviceString = Context.LOCATION_SERVICE;
LocationManager locationManager;
locationManager = (LocationManager)getSystemService(serviceString);
使用LocationManager实例对象中的getLastKnownLocation函数可以查看最后一次被某个Location Provider确定的地点,但是这个操作不会更新当前位置:
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
返回的Location对象中包含这个Provider可以提供的全部信息,可以通过对应的get方法获得。
一个实例程序如下,摘自《Professional Android 2 Application Development》:
要让Android应用程序跟踪手机位置的变化,需要调用LocationManager实例对象的requestLocationUpdates()方法,这个方法需要四个参数:
1、Location Provider的类型
2、多久更新一次位置,以毫秒为单位
3、位置变化至少多少才更新一次位置,以米为单位
4、用于处理位置变化的LocationListener
LocationListener的形式:
LocationListener onLocationChange=new LocationListener() {
public void onLocationChanged(Location location) { }
public void onProviderDisabled(String provider) { }
public void onProviderEnabled(String provider) { }
public void onStatusChanged(String provider, int status,Bundle extras) { }
};
当不再需要跟踪位置更新时,调用LocationManager实例对象的removeUpdates()方法,传入参数的类型为LocationListener.
以下程序代码实例演示了跟踪位置变化的过程,摘自《Professional Android 2 Application Development》
要获得一个特定的Location Provider的实例对象,可使用如下方法:
LocationProvider provider = locationManager.getProvider(providerName);
这里的providerName是一个字符串,最常见的providerName是以下的两种,分别对应GPS和网络:
LocationManager.GPS_PROVIDER
LocationManager.NETWORK_PROVIDER
但是,可用的Location Provider不仅仅只有这两种,通过以下的方法,可以获取当前硬件上所有可用的Location Provider:
boolean enabledOnly = true; //获取所有的Provider,或者只获取当前可用的Provider List<String> providers = locationManager.getProviders(enabledOnly);
如果不确定哪种获取位置的方式是最最好的,可以借助Criteria类,告知所需的条件,让Android决定应该使用哪种技术,具体方式如下:
Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setSpeedRequired(false); criteria.setCostAllowed(true); String bestProvider = locationManager.getBestProvider(criteria, true); //获取最好的 List<String> matchingProviders = locationManager.getProviders(criteria,false);//获取所有的
在选择好合适的Location Provider之后,就可以进行下一步的开发工作了。
要在应用程序中使用位置相关服务,先要在对应的AndroidManifest添加一些uses-permission标签,如下:
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION”/>
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION”/>
注:使用GPS时需要ACCESS_FINE_LOCATION,使用Network时需要ACCESS_COARSE_LOCATION。
在Android应用程序中,位置相关的服务是通过Location Manager来处理的,获取Location Manager的实例对象可以用以下方法:
String serviceString = Context.LOCATION_SERVICE;
LocationManager locationManager;
locationManager = (LocationManager)getSystemService(serviceString);
使用LocationManager实例对象中的getLastKnownLocation函数可以查看最后一次被某个Location Provider确定的地点,但是这个操作不会更新当前位置:
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
返回的Location对象中包含这个Provider可以提供的全部信息,可以通过对应的get方法获得。
一个实例程序如下,摘自《Professional Android 2 Application Development》:
package net.ispiders.whereami; import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; public class WhereAmI extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); String provider = LocationManager.GPS_PROVIDER; Location location = locationManager.getLastKnownLocation(provider); updateWithNewLocation(location); } private void updateWithNewLocation(Location location) { String latLongString; TextView myLocationText; myLocationText = (TextView)findViewById(R.id.myLocationText); if (location != null) { double lat = location.getLatitude(); double lng = location.getLongitude(); latLongString = "Lat:" + lat + "\nLong:" + lng; } else { latLongString = "No location found"; } myLocationText.setText("Your Current Position is:\n" + latLongString); } }
要让Android应用程序跟踪手机位置的变化,需要调用LocationManager实例对象的requestLocationUpdates()方法,这个方法需要四个参数:
1、Location Provider的类型
2、多久更新一次位置,以毫秒为单位
3、位置变化至少多少才更新一次位置,以米为单位
4、用于处理位置变化的LocationListener
LocationListener的形式:
LocationListener onLocationChange=new LocationListener() {
public void onLocationChanged(Location location) { }
public void onProviderDisabled(String provider) { }
public void onProviderEnabled(String provider) { }
public void onStatusChanged(String provider, int status,Bundle extras) { }
};
当不再需要跟踪位置更新时,调用LocationManager实例对象的removeUpdates()方法,传入参数的类型为LocationListener.
以下程序代码实例演示了跟踪位置变化的过程,摘自《Professional Android 2 Application Development》
package net.ispiders.whereami; import android.app.Activity; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; public class WhereAmI extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); String provider = locationManager.getBestProvider(criteria, true); Location location = locationManager.getLastKnownLocation(provider); updateWithNewLocation(location); locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); } private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { updateWithNewLocation(location); } public void onProviderDisabled(String provider) { updateWithNewLocation(null); } public void onProviderEnabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { } }; private void updateWithNewLocation(Location location) { String latLongString; TextView myLocationText; myLocationText = (TextView)findViewById(R.id.myLocationText); if (location != null) { double lat = location.getLatitude(); double lng = location.getLongitude(); latLongString = "Lat:" + lat + "\nLong:" + lng; } else { latLongString = "No location found"; } myLocationText.setText("Your Current Position is:\n" + latLongString); } }
相关文章推荐
- Android应用开发学习—Toast的使用(位置变化及重新自定义)
- Android开发实现距离位置变化
- 跟Google学习Android开发-起始篇-与其它应用程序交互(1)
- 利用HTML5开发Android应用程序 PPT
- 跟Google学习Android开发-起始篇-与其它应用程序交互(2)
- Android 2.2 设置应用程序安装位置
- android手把手教你开发launcher(二)——列出安装的应用程序
- Eclipse3.5中使用Blackberry8520/8900等模拟器开发是应用程序的位置
- 密西西比河谷州立大学:Android应用程序开发(二)
- Android开发之获取APP的应用程序名称以及版本名称信息java工具类
- android开发(16) 遍历所有的已经安装的应用程序,启动其他的应用程序
- Android开发新手教程--Android应用程序结构
- PHP开发Android应用程序
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
- ubuntu 开发android应用程序环境搭建,以及NDK开发的环境搭建
- Android应用程序开发以及背后的设计思想深度剖析
- Android软件开发之应用程序之间的通信介绍(九)
- android开发之记录ListView滚动位置
- Android应用程序开发以及背后的设计思想深度剖析(1)
- Android 开发应用程序如何签名