android中手机定位

来源:互联网 发布:秦义绝捏脸数据 编辑:程序博客网 时间:2024/04/29 21:22

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

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 0
原创粉丝点击