android中手机定位

先说说生活中主要用的定位方式

1.网络定位:根据ip地址定位

ip地址和实际地址形成一个数据库(纯真ip数据库),可以根据ip在数据库中查出具体地址,警方使用此方法破案
缺点:ip地址动态分配会导致不准确

2.基站定位

三个基站,能确定一点,所以在城市较好定位
范围:几百米到几公里不等,范围比较广

3.GPS定位,美国的卫星定位

至少需要三颗卫星
GPS使用24颗卫星,基本可以覆盖全球90%地区
范围:几米-几十米
缺点:容易受云层,建筑,等干扰

4.A-GPS 辅助GPS定位系统,通过网络和GPS共同定位,一般Android手机都采用此种定位方式

这里写图片描述

程序:建包service
创建LocationService.class文件

public class LocationService extends Service {

    private LocationManager lm;
    private MyLocationListener listener;
    private SharedPreferences mPref;

    @Override
    public IBinder onBind(Intent intent) {

        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        mPref = getSharedPreferences("config", MODE_PRIVATE);

        lm = (LocationManager) getSystemService(LOCATION_SERVICE);
        List<String> allProviders = lm.getAllProviders();// 获取所有位置提供者
        // System.out.println(allProviders);//有两个位置提供者passive和GPS

        Criteria criteria = new Criteria();
        criteria.setCostAllowed(true);// 是否允许付费,比如使用3g网络定位
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        // 获取最佳位置提供者
        String bestProvider = lm.getBestProvider(criteria, true);
        listener = new MyLocationListener();
        // 参数1表示位置提供者,2表示最短更新时间,3表示最短更新距离
        lm.requestLocationUpdates(bestProvider, 0, 0, listener);
    }

    class MyLocationListener implements LocationListener {

        // 位置发生变化
        public void onLocationChanged(Location location) {
            System.out.println("get location!!!");
            double longitude = location.getLongitude();// 经度
            double latitude = location.getLatitude();// 纬度
            //将获取的location保存在mpref中
            mPref.edit()
                    .putString("location", "j:" + longitude + "; w:" + latitude)
                    .commit();

            stopSelf();
        }

        // 位置提供者状态发生变化
        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        // 位置打开GPS
        public void onProviderEnabled(String provider) {

        }

        // 用户关闭GPS
        @Override
        public void onProviderDisabled(String provider) {

        }

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        // 当activity销毁的时,停止更新位置,节省电量
        lm.removeUpdates(listener);
    }
}

最后记得添加相应的权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值