黑马52期学后总结笔记(三)

三种获取手机的位置的方式

1、网络定位(network)。前提是必须连上网络:wifi、3G、2G;

 获取到IP地址

 例如:传美版QQ,彩虹版QQ,珊瑚虫版QQ,就有一个功能显示对方的IP;

 根据IP显示具体的位置;

 

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

 

 有局限性:针对固定的IP地址。

 如果手机网或者ip地址是动态分布IP,这个偏差就很大。这种情况是无法满足需求的。

 

2、基站定位(passive)。

 

工作原理:手机能打电话,是需要基站的。手机定位也是用基站的。

手机附近能收到3个基站的信号,就可以定位了。

基站定位有可能很准确,比如基站多的地方;

如果基站少的话就会相差很大。

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

 

3、GPS定位(gps)。

A-GPS使用了卫星定位 需要联网辅助修正位置

需要3颗卫星;

特点是:需要搜索卫星,头顶必须是空旷的;

 

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

 

卫星:美国人、欧洲人的卫星。

北斗:中国的,但没有民用,只是在大巴,战机等使用。

精确度:15米左右

代码实现获取手机位置

 

1.写代码单独创建一个工程(TestGPS)演示;

 packagecom.example.testgps;

 

publicclass MainActivity extends Activity {

    private LocationManager lm;

    private MyLocationListener listener;

 

    @Override

    protected void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        lm= (LocationManager) getSystemService(LOCATION_SERVICE);

        listener= new MyLocationListener();

        // 第二个参数:两次位置更新的时间间隔

        lm.requestLocationUpdates("gps", 0, 0, listener);

    }

 

    class MyLocationListener implementsLocationListener {

        // 当位置发生变化 执行者方法

        @Override

        publicvoid onLocationChanged(Location location) {

            String longitude = "经度:" + location.getLongitude() +"\n";

            String latitude = "纬度:" + location.getLatitude() +"\n";

            String accuracy = "精度:" + location.getAccuracy() +"\n";

            TextView textView = newTextView(getApplicationContext());

            textView.setText(longitude + latitude +accuracy);

            setContentView(textView);

 

        }

 

        // 当某一个位置提供者状态发生变化的时候 关闭--》开启或者开启--》关闭

        @Override

publicvoid onStatusChanged(String provider, int status, Bundle extras) {

 

        }

 

        @Override

        publicvoid onProviderEnabled(String provider) {

 

        }

 

        @Override

        publicvoid onProviderDisabled(String provider) {

 

        }

 

    }

 

    @Override

    protected void onDestroy() {

        super.onDestroy();

        lm.removeUpdates(listener);

        listener= null;

    }

 

}

 

2.权限:

 <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<uses-permissionandroid:name="android.permission.ACCESS_MOCK_LOCATION"/>


获取手机位置的细节-火星坐标

准备条件是:得到GPS坐标

 

1、在ditu.google.cn上输入显示,找出偏移的原因;

2、介绍火星坐标

3、如何解决火星坐标的偏移的问题、创建Java工程使用代码

public static void main(String[] args)throws Exception {

              ModifyOffset modifyOffset =ModifyOffset.getInstance(GetHuoxingLocation.class.getResourceAsStream("axisoffset.dat"));

              PointDouble double1 =modifyOffset.s2c(newPointDouble(116.35372477, 40.06813447));

              System.out.println(double1);

 

       }

 

代码实现获取手机位置

 

 

1、创建服务GPSService 并移植代码到里面面,并优化细节。

2、  优化代码细节

       Criteria criteria = new Criteria();

        criteria.setAccuracy(Criteria.ACCURACY_FINE);

        Stringprovider = lm.getBestProvider(criteria,true);

        lm.requestLocationUpdates(provider, 0, 0,listener);

 

 

设置参数细化:

criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
criteria.setAltitudeRequired(false);//不要求海拔信息
criteria.setBearingRequired(false);//不要求方位信息
criteria.setCostAllowed(true);//是否允许付费
criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值