Android开发之GPS获取当前位置信息

原文链接:http://blog.csdn.net/dawanganban/article/details/11303537

 

01.package com.example.gpstest;  
02.  
03.import org.apache.http.util.LangUtils;  
04.  
05.import android.content.Context;  
06.import android.content.SharedPreferences;  
07.import android.content.SharedPreferences.Editor;  
08.import android.location.Criteria;  
09.import android.location.Location;  
10.import android.location.LocationListener;  
11.import android.location.LocationManager;  
12.import android.os.Bundle;  
13.import android.text.TextUtils;  
14.  
15./** 
16. * 保证这个类只存在一个实例  
17. * @author zehua 
18. * 
19. */  
20.public class GPSInfoProvider {  
21.    LocationManager manager;  
22.    private static GPSInfoProvider mGPSInfoProvider;  //单例  
23.    private static Context context;             //单例  
24.    private static MyLoactionListener listener; //单例  
25.  //1.私有化构造方法  
26.      
27.    private GPSInfoProvider(){};  
28.      
29.  //2. 提供一个静态的方法 可以返回他的一个实例  
30.    public static synchronized GPSInfoProvider getInstance(Context context){  
31.        if(mGPSInfoProvider==null){  
32.            synchronized (GPSInfoProvider.class) {  
33.                if(mGPSInfoProvider == null){  
34.                    mGPSInfoProvider = new GPSInfoProvider();  
35.                    GPSInfoProvider.context = context;  
36.                }  
37.            }  
38.        }  
39.        return mGPSInfoProvider;  
40.    }  
41.      
42.      
43.    // 获取gps 信息   
44.    public String getLocation(){  
45.        manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE);  
46.        //获取所有的定位方式  
47.        //manager.getAllProviders(); // gps //wifi //  
48.        //获取当前手机最好的位置提供者  
49.        String provider = getProvider(manager);  
50.        // 注册位置的监听器   
51.        //60000每隔一分钟获取当前位置(最大频率)  
52.        //位置每改变50米重新获取位置信息  
53.        //getListener()位置发生改变时的回调方法  
54.        manager.requestLocationUpdates(provider,60000, 50, getListener());  
55.        //拿到最后一次的位置信息  
56.        SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);  
57.        String location = sp.getString("location", "");  
58.        return location;  
59.    }  
60.      
61.  
62.      
63.    //停止gps监听  
64.    public void stopGPSListener(){  
65.        manager.removeUpdates(getListener());  
66.    }  
67.      
68.    //获取gps监听实例  
69.    private synchronized MyLoactionListener getListener(){  
70.        if(listener==null){  
71.            synchronized (GPSInfoProvider.class) {  
72.                if(listener == null){  
73.                    listener = new MyLoactionListener();  
74.                }  
75.            }  
76.              
77.        }  
78.        return listener;  
79.    }  
80.      
81.    private class MyLoactionListener implements LocationListener{  
82.  
83.        /** 
84.         * 当手机位置发生改变的时候 调用的方法 
85.         */  
86.        public void onLocationChanged(Location location) {  
87.            String latitude ="latitude "+ location.getLatitude(); //获取纬度    
88.            String longtitude = "longtitude "+ location.getLongitude(); //获取精度  
89.            //最后一次获取到的位置信息 存放到sharedpreference里面  
90.            SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);  
91.            Editor editor = sp.edit();  
92.            editor.putString("location", latitude+" - "+ longtitude);  
93.            editor.commit();   
94.        }  
95.  
96.        /** 
97.         * 某一个设备的状态发生改变的时候 调用 
98.         *  可用->不可用   
99.         *  不可用->可用 
100.         *  status 当前状态 
101.         *  extras 额外消息 
102.         */  
103.        public void onStatusChanged(String provider, int status, Bundle extras) {  
104.              
105.        }  
106.  
107.        /** 
108.         * 某个设备被打开 
109.         */  
110.        public void onProviderEnabled(String provider) {  
111.  
112.        }  
113.  
114.        /**某个设备被禁用 
115.         *  
116.         */  
117.        public void onProviderDisabled(String provider) {  
118.              
119.        }  
120.          
121.    }  
122.      
123.    /**\ 
124.     *  
125.     * @param manager 位置管理服务 
126.     * @return 最好的位置提供者 
127.     */  
128.    private String getProvider(LocationManager manager){  
129.        //设置查询条件  
130.        Criteria criteria = new Criteria();  
131.        //定位精准度  
132.        criteria.setAccuracy(Criteria.ACCURACY_FINE);  
133.        //对海拔是否敏感  
134.        criteria.setAltitudeRequired(false);  
135.        //对手机耗电性能要求(获取频率)  
136.        criteria.setPowerRequirement(Criteria.POWER_MEDIUM);  
137.        //对速度变化是否敏感  
138.        criteria.setSpeedRequired(true);  
139.        //是否运行产生开销(费用)  
140.        criteria.setCostAllowed(true);  
141.        //如果置为ture只会返回当前打开的gps设备  
142.        //如果置为false如果设备关闭也会返回  
143.        return  manager.getBestProvider(criteria, true);  
144.    }  
145.}  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值