常用三种定位方式:
1.GPS定位: 基于电磁波传输,定位精准,室内可能接收不到信号,不依赖网络;
2.网络定位(wifi):基于大数据,手机定位后的数据统计到运营商的数据库,数据可能会有延迟;
3.基站定位:有手机信号就能定位,定位不精准,差的时候可能相差一两公里。
权限
<!-- gps定位权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 粗略定位 --> <!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> -->
代码
public class MainActivity extends Activity { private static final String TAG = "MainActivity"; //定位管理器 private LocationManager mLocationManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化定位管理器 mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); List<String> providers = mLocationManager.getProviders(false); for (String provider : providers) { Log.d(TAG, provider); } } @Override protected void onStart() { super.onStart(); // 请求位置更新 /** * provider:提供者(定位方式)GPS_PROVIDER(gps定位)、NETWORK_PROVIDER(网络定位)、PASSIVE_PROVIDER(被动定位,依赖其他app的定位结果) * minTime:定位时间间隔 单位毫秒,传0表示最大限度去定位 * minDistance:下次定位需要经过的最小间隔 */ mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, mListener); } // 定位监听器 private LocationListener mListener = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // 定位状态改变(可用/临时不可用) Log.d(TAG, "onStatusChanged()"); } @Override public void onProviderEnabled(String provider) { // 定位服务可用(设置-》位置服务-》打开定位) Log.d(TAG, "onProviderEnabled()"); } @Override public void onProviderDisabled(String provider) { // 定位服务不可用(设置-》位置服务-》关闭定位) Log.d(TAG, "onProviderDisabled()"); } @Override public void onLocationChanged(Location location) { // 定位到结果 Log.d(TAG, "onLocationChanged()"); //经纬度(121.518024,31.081642) double longitude = location.getLongitude();// 经度 double latitude = location.getLatitude();// 维度 Log.d(TAG, "经纬度(" + longitude + "," + latitude + ")"); double altitude = location.getAltitude();// 海拔 float speed = location.getSpeed();// 移动速度 Log.d(TAG, "altitude = " + altitude + ", speed = " + speed); } }; @Override protected void onDestroy() { super.onDestroy(); // 停止定位 mLocationManager.removeUpdates(mListener); } }
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览123463 人正在系统学习中