案例1:通过ListView组件来显示所有的LocationProvider-主要代码
1. public class MainActivity extends Activity {
2.
3. @Override
4. protected void onCreate(Bundle savedInstanceState) {
5. super.onCreate(savedInstanceState);
6. setContentView(R.layout.activity_main);
7. ListViewlst = (ListView)findViewById(R.id.list1);
8. //获取系统的定位服务
9. LocationManager manger = (LocationManager)getSystemService(LOCATION_SERVICE);
10. //获取系统所有的定位提供者信息
11. List<String> providers = manger.getAllProviders();
12. //绑定到ListView中显示
13. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,providers);
14. lst.setAdapter(adapter);
15. }
16. }
代码运行结果如图所示

通过运行结果可以看出,模拟器中可用LocationProvider有如下3个:
①network:由LocationManager.NETWORK_PROVIDER常量表示,代表通过无线基站或者Wi-Fi网络来定位。
②passive:由LocationManager.Passive_PROVIDER表示。
③gps:由LocationManager.GPS_PROVIDER常量表示,它代表通过GPS卫星获取定位信息。
案例2:利用Criteria来设置条件,获取指定条件的LocationProvider-主要代码
1. //构造条件
2. Criteria criteria = new Criteria();
3. //免费
4. criteria.setCostAllowed(true);
5. //提供高度信息
6. criteria.setAltitudeRequired(false);
7. //提供方向信息
8. criteria.setBearingRequired(false);
9. //获取系统所有满足条件的定位提供者信息
10. List<String> providers = manger.getProviders(criteria, false);
11. //绑定到ListView中显示
12. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, providers);
13. lst.setAdapter(adapter);
另外还需要在mainfest文件中注册权限:
1<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
代码运行结果如图所示:

案例3:实现GPS定位的核心代码-主要代码
1. public class MainActivity extends Activity {
2.
3. @Override
4. protected void onCreate(Bundle savedInstanceState) {
5. super.onCreate(savedInstanceState);
6. setContentView(R.layout.activity_main);
7. //获取系统的定位服务
8. LocationManager manager = (LocationManager)getSystemService(LOCATION_SERVICE);
9. //给manager设置位置监听器参数,包括定位提供者,检测的频率。精度范围,以及位置监听器 LocationListener
10. manager.requestLocationUpdates(manager.GPS_PROVIDER, 1000l, 0.0f,new LocationListener() {
11. @Override
12. public void onStatusChanged(String provider, int status, Bundle extras) {
13. }
14. @Override
15. public void onProviderEnabled(String provider) {
16. }
17. @Override
18. public void onProviderDisabled(String provider) {
19. }
20. @Override
21. //当位置发生变化的时候触发该方法
22. public void onLocationChanged(Location location) {
23. Log.i("TAG", "位置发生变化:纬度:"+location.getLatitude()+"经 度:"+location.getLongitude());}
24. });
25. }}
另外,需要在mianfest文件中注册权限,代码如下所示:
<uses-permission android:name="android. permission.ACCESS_FINE_LOCATION"/>
代码运行的结果如下图所示,当用模拟器向程序发送经纬度变化的值后,可以看DDMS有相应的输出。

案例4:使用模拟器实现临近区域警告效果 -主要代码
1. LocationManager manager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
2. //目标定位的经纬度
3. double targetLongitude = 113.66632841527462;
4. double targetLatitude = 34.752014421190424;
5. float radius = 5000; //定义半径 单位米
6. Intent intent =new Intent("myreceiver");
7. PendingIntent pd = PendingIntent.getBroadcast(this, 0, intent,0);
8. //加入邻近警告
9. manager.addProximityAlert(targetLatitude, targetLongitude, radius, -1, pd);
10. MyReceiver receiver = new MyReceiver();
11. registerReceiver(receiver, new IntentFilter("myreceiver")); //注册服务
12. //定义广播接受者处理广播
13. class MyReceiver extends BroadcastReceiver{
14. @Override
15. public void onReceive(Context context, Intent intent) {
16. TextViewtv = (TextView)findViewById(R.id.txtshow);
17. //根据Intent的boolean值判断是否进入和离开该区域
18. booleanisEnter = intent.getBooleanExtra(LocationManager.KEY_PROXIMI TY_ENTERING,false);
19. if(isEnter){
20. tv.setText("您已经进入到该区域");
21. }else{
22. tv.setText("您已经离开到该区域");}
23. }
24. }
最后,别忘了在mianfest文件中加上权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
代码运行结果如图所示:

