博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GPSInfoProvider定位
阅读量:6405 次
发布时间:2019-06-23

本文共 4322 字,大约阅读时间需要 14 分钟。

hot3.png

public class GPSInfoProvider{        private static GPSInfoProvider gpsInfoProvider;        private static Context context;        private static MyLocationListener listener;        private LocationManager locationManager;        private GPSInfoProvider()        {        }        /**         * 为了让这个方法一定执行完,所以我们加入了synchronized来修饰         * @return         */        public static synchronized GPSInfoProvider getInstance(Context context)        {                if(gpsInfoProvider == null)                {                        gpsInfoProvider = new GPSInfoProvider();                        GPSInfoProvider.context = context;                }                return gpsInfoProvider;        }        /**         * 获取位置         * @return         */        public String getLocation()        {                locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);                String provider = getBestProvider();                //这个方法是位置更新的的操作,有四个参数                //第一个参数就是使用的定位设备啊,如gps,基站定位啊                //第二个参数就是多长时间更新一次定位信息,太频繁了会很耗电,根据自己程序的实际需要来进行确定                //第三个参数就是用户位移了多少米之后,就重新获取一次定位信息,太频繁了会很耗电,根据自己程序的实际需要来进行确定                //最后一个参数就是在位置发生变化的回调方法                locationManager.requestLocationUpdates(provider, 60000, 50, getListener());                //locationManager.getAllProviders();//它会把所以支持的定位方式都打列出来,这样就可以知道手机所支持的定位啦                SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);                String location = sp.getString("lostLocation", "");                return location;        }        //停止gps        public void stopGPSListener()        {                if(locationManager != null)                {                        locationManager.removeUpdates(getListener());                }        }        private String getBestProvider()        {                Criteria criteria = new Criteria();                //这个是定义它的定位精度的                //Criteria.ACCURACY_COARSE  这个是一般的定位                //Criteria.ACCURACY_FINE  这个是精准定位                criteria.setAccuracy(Criteria.ACCURACY_FINE);                //设置是不是对海拔敏感的                criteria.setAltitudeRequired(false);                //设置对手机的耗电量,定位要求越高,越耗电                criteria.setPowerRequirement(Criteria.POWER_MEDIUM);                //设置对速度变化是不是敏感                criteria.setSpeedRequired(true);                //设置在定位时,是不是允许与运营商交换数据的开销                criteria.setCostAllowed(true);                //这个方法是用来得到最好的定位方式的,它有两个参数,一个是Criteria(类似于Map集合),就是一些条件,比如说对加速度敏感啊,什么海拔敏感这些的                //第二个参数就是,如果我们置为false,那么我们得到的也有可能是已经关掉了的设备,如果是true那么,就只会得到已经打开了的设备                return locationManager.getBestProvider(criteria, true);        }        //做成单例模式        private synchronized MyLocationListener getListener()        {                if(listener == null)                {                        listener = new MyLocationListener();                }                return listener;        }        //=========================================================================        private class MyLocationListener implements LocationListener        {                @Override                public void onLocationChanged(Location location)                {                        //手机位置发生改变时调用的方法                        String latitude = "纬度:" + location.getLatitude();//纬度                        String longitude = "经度:" + location.getLongitude();//经度                        SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);                        Editor editor = sp.edit();                        editor.putString("lastLocation", latitude + " - " + longitude);                        editor.commit();                }                @Override                public void onStatusChanged(String provider, int status, Bundle extras)                {                        //定位设备的状态发生改变的时候调用的方法,比如说用户把设备打开,或关闭,第二个参数就是设备的状态啦                }                @Override                public void onProviderEnabled(String provider)                {                        //设备打开的时候调用的方法                }                @Override                public void onProviderDisabled(String provider)                {                        //设备关闭的时候调用的方法                }        }}

转载于:https://my.oschina.net/oppo4545/blog/199004

你可能感兴趣的文章
leetcode 415. Add Strings
查看>>
嵌入式软件设计第10次实验报告
查看>>
Poj3684题解 Physics Experiment 弹性碰撞
查看>>
cloudera卸载
查看>>
推荐5款简洁美观的Hexo主题
查看>>
Web 性能压力测试工具(WebBench)
查看>>
Web前端性能优化全攻略
查看>>
PHPCMS源码底层分析 phpcms\base.php(编写中,未完成)
查看>>
Android 使用NDK编译sipdroid Library
查看>>
2012 MUTC 3 总结
查看>>
slim中的参数获取
查看>>
mysql5.7.22 zip 版安装
查看>>
time.setToNow() 取当前时间,月份有误
查看>>
arcengine9.3与10开发授权代码
查看>>
UEFI+GPT下安装Win10和Ubuntu16.04双系统相关问题(引导、无线连不上网)
查看>>
【题解】最大公约数之和 V3 51nod 1237 杜教筛
查看>>
架构师速成6.7-设计开发思路-uml 分类: 架构师速成 ...
查看>>
js设置radio选中
查看>>
8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现...
查看>>
第一次发博客-说说我的B/S开发框架(asp.net mvc + web api + easyui)
查看>>