package com.example.gpstest;import org.apache.http.util.LangUtils;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.text.TextUtils;/** * 保证这个类只存在一个实例  * @author zehua * */public class GPSInfoProvider {LocationManager manager;private static GPSInfoProvider mGPSInfoProvider;  //单例private static Context context;             //单例private static MyLoactionListener listener; //单例  //1.私有化构造方法private GPSInfoProvider(){};  //2. 提供一个静态的方法 可以返回他的一个实例public static synchronized GPSInfoProvider getInstance(Context context){if(mGPSInfoProvider==null){synchronized (GPSInfoProvider.class) {if(mGPSInfoProvider == null){mGPSInfoProvider = new GPSInfoProvider();GPSInfoProvider.context = context;}}}return mGPSInfoProvider;}// 获取gps 信息 public String getLocation(){manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE);//获取所有的定位方式//manager.getAllProviders(); // gps //wifi ////获取当前手机最好的位置提供者String provider = getProvider(manager);// 注册位置的监听器 //60000每隔一分钟获取当前位置(最大频率)//位置每改变50米重新获取位置信息//getListener()位置发生改变时的回调方法manager.requestLocationUpdates(provider,60000, 50, getListener());//拿到最后一次的位置信息SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);String location = sp.getString("location", "");return location;}//停止gps监听public void stopGPSListener(){manager.removeUpdates(getListener());}//获取gps监听实例private synchronized MyLoactionListener getListener(){if(listener==null){synchronized (GPSInfoProvider.class) {if(listener == null){listener = new MyLoactionListener();}}}return listener;}private class MyLoactionListener implements LocationListener{/** * 当手机位置发生改变的时候 调用的方法 */public void onLocationChanged(Location location) {String latitude ="latitude "+ location.getLatitude(); //获取纬度  String longtitude = "longtitude "+ location.getLongitude(); //获取精度//最后一次获取到的位置信息 存放到sharedpreference里面SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);Editor editor = sp.edit();editor.putString("location", latitude+" - "+ longtitude);editor.commit(); }/** * 某一个设备的状态发生改变的时候 调用 *  可用->不可用   *  不可用->可用 *  status 当前状态 *  extras 额外消息 */public void onStatusChanged(String provider, int status, Bundle extras) {}/** * 某个设备被打开 */public void onProviderEnabled(String provider) {}/**某个设备被禁用 *  */public void onProviderDisabled(String provider) {}}/**\ *  * @param manager 位置管理服务 * @return 最好的位置提供者 */private String getProvider(LocationManager manager){//设置查询条件Criteria criteria = new Criteria();//定位精准度criteria.setAccuracy(Criteria.ACCURACY_FINE);//对海拔是否敏感criteria.setAltitudeRequired(false);//对手机耗电性能要求(获取频率)criteria.setPowerRequirement(Criteria.POWER_MEDIUM);//对速度变化是否敏感criteria.setSpeedRequired(true);//是否运行产生开销(费用)criteria.setCostAllowed(true);//如果置为ture只会返回当前打开的gps设备//如果置为false如果设备关闭也会返回return  manager.getBestProvider(criteria, true);}}

更多相关文章

  1. Android下拉列表使用方法
  2. Android 获取设备唯一标识
  3. Android获得屏幕分辨率的两种方法
  4. Android中getChildAt()方法介绍
  5. Android中NDK的使用方法
  6. Android的window类的常用方法
  7. Android 拨打webView 里面的电话号码的方法
  8. android 设备调试Installation failed with message INSTALL_CAN
  9. Spinner下拉位置处理

随机推荐

  1. Android中获取屏幕相关信息(屏幕大小,状态
  2. Android(安卓)自定义组件 方法篇
  3. Android布局(序章)
  4. AndroidStudio使用ViewPagerIndicator
  5. Android(安卓)ROM的创建和烧录
  6. android和j2me之清屏(clearScreen)
  7. TabHost页卡
  8. Debug with android ndk-gdb
  9. Android(安卓)SDK 和 杂7杂8
  10. Android(安卓)初识Retrofit