zoukankan      html  css  js  c++  java
  • 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"/>

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

  • 相关阅读:
    nginx 、tomcat 配置表单附件大小限制
    清理redis服务器数据
    tomcat 8.5.55 webapps 无法部署应用目录 org.apache.catalina.startup.HostConfig.deployDirectory
    redis + tomcat8.5 session共享
    linux tar 打包
    mysql ORDER BY RAND() 语句优化
    解决Linux下程序端口占用问题
    javamail邮件发送开发中SharedByteArrayInputStream类找不到的错误(java.lang.NoClassDefFoundError: com/sun/mail/util/SharedByteArrayInputStream)
    ansible判定文件或者文件夹是否存在
    ansible应用
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4633308.html
Copyright © 2011-2022 走看看