Android初级教程获取手机位置信息GPS与动态获取最佳方式
简单介绍一下gps定位的操作。
主要是靠locationmanger这个api完成的一些操作;通过获取这个实例,然后调用它的requestLocationUpdates方法进行注册。传入的参数分别有以下含义:
* 1、provider:哪种定位方式
* 2、minTime:定位的时间差
* 3、minDistance:定位距离差
* 4、定位监听回调
然后第四个参数是一个监听器,要回调这个方法,监听位置的变化情况。实时更新所在位置
程序代码如下:
package com.example.gps; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv_show_location; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_show_location = (TextView) findViewById(R.id.tv_show_location); //获取定位管理器 LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); //设置定位信息 //坐标位置改变,回调此监听方法 LocationListener listener = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } //位置改变的时候调用,这个方法用于返回一些位置信息 @Override public void onLocationChanged(Location location) { //获取位置变化结果 float accuracy = location.getAccuracy();//精确度,以密为单位 double altitude = location.getAltitude();//获取海拔高度 double longitude = location.getLongitude();//经度 double latitude = location.getLatitude();//纬度 float speed = location.getSpeed();//速度 //显示位置信息 tv_show_location.append("accuracy:"+accuracy+"\n"); tv_show_location.append("altitude:"+altitude+"\n"); tv_show_location.append("longitude:"+longitude+"\n"); tv_show_location.append("latitude:"+latitude+"\n"); tv_show_location.append("speed:"+speed+"\n"); } }; locationManager.requestLocationUpdates("gps", 0, 0, listener);//Register for location updates } }
而如果想自动获取最佳定位方式的话,加入以下代码即可:
//动态获取所有的定位方式 List<String> allProviders = locationManager.getAllProviders(); for (String string : allProviders) { System.out.println("所有定位方式:>>>"+string); } Criteria criteria = new Criteria(); criteria.setCostAllowed(true);//设置产生费用,收费的一般比较精确 criteria.setAccuracy(Criteria.ACCURACY_FINE);//精确度设为最佳 //动态获取最佳定位方式 String bestProvider = locationManager.getBestProvider(criteria, true); /** * 1、provider:那种定位方式 * 2、minTime:定位的时间差 * 3、minDistance:定位距离差 * 4、定位监听回调 * */ //Register for location updates locationManager.requestLocationUpdates(bestProvider, 0, 0, listener);用模拟器的话。需要配置三个权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
第二个专门针对模拟器的权限,真机则不需要。
运行程序,用DDMS的Maual下的Decimal发送变化的位置信息,则可以在手机上显示坐标的变化。
对于基于位置的操作,建议在真机上测试。