Android手机定位技术的发展

基于以下三种方式的移动位置:1. 网络位置 ;2. 基站定位。 3. GPS定位

1 网络位置

     前提是连接到网络:Wifi、3G、2G

  到达IP址
 比如:彩虹版QQ,珊瑚虫版QQ,就有一个功能显示对方的IP;
 依据IP显示详细的位置;

 原理是建立一个库那个IP地址相应那个地方。早期警方破案就採用此特点;

 有局限性:针对固定的IP地址。
 假设手机网或者ip地址是动态分布IP,这个偏差就非常大。

这样的情况是无法满足需求的。

2 基站定位

    工作原理:手机能打电话,是须要基站的。手机定位也是用基站的。
手机附近能收到3个基站的信号,就能够定位了。


基站定位有可能非常准确。比方基站多的地方;
假设基站少的话就会相差非常大。


准确度:几十米到几公里不等;

3 GPS定位

A-GPS 使用了卫星定位 须要联网辅助修正位置(手机常常使用,优先请求网络,获取之前保存的卫星轨道的信息cache,)
特点是:须要搜索卫星, 头顶必须是空旷的;

影响条件:云层、大厦、大树。

下面是实现的代码:

package com.andy.gpsdemo;

import com.example.gpsdemo.R;

import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class MainActivity extends ActionBarActivity {
	// 位置服务
	private LocationManager locationManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

		/*List<String> provider = locationManager.getAllProviders();
		for (String string : provider) {
			System.out.println(string);
		}*/

		// 注冊监听位置服务
		// 给位置提供者设置条件
		Criteria criteria = new Criteria();
		criteria.setAccuracy(Criteria.ACCURACY_FINE);// 获取精确的位置
		// criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
		// criteria.setAltitudeRequired(false);//不要求海拔信息
		// criteria.setBearingRequired(false);//不要求方位信息
		// criteria.setCostAllowed(true);//是否同意付费
		// criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求

		String proveder = locationManager.getBestProvider(criteria, true);
		locationManager.requestLocationUpdates(proveder, 0, 0,
				new LocationListener() {

					@Override
					public void onLocationChanged(Location location) {
						// 当改变位置时回调
						String longitude = "经度:" + location.getLongitude();
						String latitudeString = "维度:" + location.getLatitude();
						String accuracy = "准确度:" + location.getAccuracy();
						TextView textView = new TextView(MainActivity.this);
						textView.setText(longitude + "
" + latitudeString
								+ "
" + accuracy);

						setContentView(textView);
					}

					@Override
					public void onProviderDisabled(String provider) {
						// 当一个位置提供者不能够使用
					}

					@Override
					public void onProviderEnabled(String provider) {
						// 当一个位置提供者能够使用
					}

					@Override
					public void onStatusChanged(String provider, int status,
							Bundle extras) {
						// 当状态发生改变的时候回调 开启--关闭 。关闭--开启
					}

				});
	}

}

布局文件为:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.andy.gpsdemo.MainActivity" >

    <TextView
        android:textSize="22sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>


须要增加的权限为:

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>//模拟器測试使用
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

版权声明:本文博客原创文章,博客,未经同意,不得转载。

原文地址:https://www.cnblogs.com/bhlsheji/p/4633308.html