Android之基于位置的服务
来源:互联网 发布:蛙5火箭知乎 编辑:程序博客网 时间:2024/05/16 10:46
由于移动设备相比于电脑可以随身携带,我们通过地理定位的技术就可以随时得知自己所在的位置,从而围绕这一点开发出很多有意思的应用。
基于位置的服务简称LBS,这个技术随着移动互联网的兴起,在最近的几年里十分火爆。 其实它本身并不是什么时髦的技术,主要的工作原理就是利用无线电通讯网络或GPS等定位方式来确定出移动设备所在的位置,而这种定位技术早在很多年前就已经出现了。
那为什么 LBS 技术直到最近几年才开始流行呢?这主要是因为,在过去移动设备的功 能极其有限,即使定位到了设备所在的位置,也就仅仅只是定位到了而已,我们并不能在位 置的基础上进行一些其他的操作。而现在就大大不同了,有了 Android 系统作为载体,我们 可以利用定位出的位置进行许多丰富多彩的操作。比如说天气预报程序可以根据用户所在的 位置自动选择城市,发微博的时候我们可以向朋友们晒一下自己在哪里,不认识路的时候随 时打开地图就可以查询路线,等等等等。
——位置提供者
选择一个位置提供器来确定设备当前的位置。Android 中一般有三种位置提供器可供选择,GPS_PROVIDER、NETWORK_PROVIDER 和 PASSIVE_PROVIDER。
——GPS_PROVIDER(基于GPS的位置提供者)
GPS定位系统由三部分组成,GPS卫星组成的空间部分,若干地面站组成的控制部分和用户手中的接收机。
GPS的空间部分由GPS卫星组成,覆盖了全球上空的GPS卫星星座,共24颗卫星,必须保证在各处能时时观测到4颗卫星,这样才能保证GPS系统的准确定位。
GPS定位受环境影响较大,在晴朗的空地上,较容易搜索到卫星,而在室内通常是无法搜索到卫星的。GPS定位需要使用GPS功能模块,而GPS功能模块的耗电量是巨大的。
——NETWORK_PROVIDER(基于网络的位置提供者)
1.WIFI定位:其原理是首先收集每个WIFI无线接入点的位置,对每个无线路由器进行唯一的标识,在数据库中注明这些接入点的具体位置。 使用时,一旦发现有WI-FI接入点,则进入到数据中查看匹配的记录,进而得到位置信息。
2.基站定位: 此类位置的获取有赖于手机无线通讯信号,当手机处在信号覆盖范围内,手机可以获得该区域(即通讯术语中的“小区”)的识别号。因为这些识别号是惟一的,因此可以将识别号和地理坐标对应起来,因此根据识别号就可以知道地理位置。但是误差比较大。
——PASSIVE_PROVIDER(被动位置提供者)
——LocationManager:其实基于位置的服务所围绕的核心就是要确定出自己所在的位置,这在 Android 中并不困难,主要借助 这个类就可以实现了。
LocationManager locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
——LocationProvider:提供定位功能的组件集合
——Criteria:代表一个过滤的条件
Criteria criteria = new Criteria();
// //设置定位精确度Criteria
criteria.setAccuracy(Criteria.ACCURACY_FINE);
// //设置是否需要海拔信息
criteria.setAltitudeRequired(false);
// //设置是否需要方位信息
criteria.setBearingRequired(false);
// //设置是否允许运营商收费
criteria.setCostAllowed(true);
// //设置对电源的要求
criteria.setPowerRequirement(Criteria.POWER_LOW);
final String bestProvider =lm.getBestProvider(criteria,true);
——LocationListener
onStatusChanged: 在用户禁用具有定位功能的硬件时被调用
onProviderEnabled:在用户启动具有定位功能的硬件是被调用
onProviderDisabled:在提供定位功能的硬件状态改变是被调用
onLocationChanged:在设备的位置改变时被调用
写一个简单的例子,来获取所有的LocalProvider
代码如下:
public class MainActivity extends Activity {private LocationManager mLocationManager;private ListView list;private Criteria mCriteria;String bestProvider;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);list=(ListView) findViewById(R.id.list);mCriteria=new Criteria();//设置定位精度CriteriamCriteria.setAccuracy(Criteria.ACCURACY_FINE);//设置是否需要海拔信息mCriteria.setCostAllowed(true);//设置是否需要方位信息mCriteria.setBearingRequired(true);//设置是否允许运营商收费mCriteria.setCostAllowed(false);//设置对电源的要求//mCriteria.setPowerRequirement(Criteria.POWER_LOW);mLocationManager=(LocationManager) getSystemService(LOCATION_SERVICE);//获取所有的位置提供者//List<String>lists=mLocationManager.getAllProviders();List<String>lists=mLocationManager.getProviders(mCriteria, false);ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,lists);list.setAdapter(adapter);}}
布局文件就一个listview,我就不贴代码了~
注意:要加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- Android之基于位置的服务
- Android基于位置的服务
- Android 基于位置的服务
- android知识小贴士之二:基于位置的服务
- Android之位置的服务
- Android 基于位置服务的基本知识
- Android 基于位置的服务(LBS)
- Android 特色开发,基于位置的服务
- Android 特色开发,基于位置的服务
- 基于位置的服务之如何找到自己的位置
- 基于位置的服务之如何找到自己的位置
- 基于位置的服务
- 基于位置的服务
- 基于位置的服务
- 基于位置的服务
- 基于位置的服务
- 基于位置的服务
- 基于位置的服务
- 很认真的聊一聊程序员的自我修养
- 表达式求值
- 自学360之滚动的TextView
- HDU 5724 博弈,SG函数
- 【 Codeforces 615A】A. Bulbs
- Android之基于位置的服务
- WPF编程宝典读书笔记——第10章 资源(一)
- 取出一个字符串中字母出现的次数。如:字符串:"abcde%^kka27qoq" ,输出格式为: a(2)b(1)k(2)...
- Alice and Bob
- POJ 2406 Power Strings (kmp求循环节)
- Android中的事件分发和处理
- Android 补间动画
- SharedPreferences 监听变化Listener 的onSharedPreferenceChanged方法没有调用
- Iframe实现Ajax文件上传Servlet响应上传结果