通过GPS获取位置信息

通过GPS获取位置信息

自己封装了一个单例工具类,用来获取GPS位置信息

package com.e7wifi.colourmedia.Util;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;

/**
 * Created by 135 on 2016/7/8.
 */
public class GpsUtils {
    private static GpsUtils instance = null;
    Context context;
    LocationManager locationManager;
    String locationProvider;
    FinishLocationListener finishLocationListener;
    public double[] locations=new double[2];
    private GpsUtils(Context context){
        this.context=context;
    }

    public static GpsUtils getInstance(Context context) {
        if (instance == null) {
            synchronized (GpsUtils.class) {
                if (instance == null) {
                    instance = new GpsUtils(context);
                }
            }
        }
        return instance;
    }

    /**
     * 开始定位手机位置
     */
    public  void  startGetGps()
    {
        setBestGps();
        //获取Location
        Location location = locationManager.getLastKnownLocation(locationProvider);
            if(location!=null) {
                locations[0] = location.getLatitude();
                locations[1] = location.getLongitude();
            }
            locationManager.requestLocationUpdates(locationProvider, 2000, 10, locationListener);
//            if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
//            {
//                toggleGPS();
//            }
        }
//获取做好的定位方式并设置
    private void setBestGps() {
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
        criteria.setAltitudeRequired(false);//无海拔要求
        criteria.setBearingRequired(false);//无方位要求
        criteria.setCostAllowed(true);//允许产生资费
        criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        locationProvider=locationManager.getBestProvider(criteria,false);
    }


    /**
     * 移除位置监听
     */
   public void removeGpsListener()
   {
       locationManager.removeUpdates(locationListener);
   }

    /**
     * 开启位置监听
      */
   public void openUpdateListener(int minTime,int minDistance)
   {
       locationManager.requestLocationUpdates(locationProvider, minTime, minDistance, locationListener);
   }


//打开GPS,这个API已经无法使用了。现在的权限机制,这个方法已经无法代码打开GPS
    private void toggleGPS() {

        Intent gpsIntent = new Intent();

        gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");

        gpsIntent.addCategory("android.intent.category.ALTERNATIVE");

        gpsIntent.setData(Uri.parse("custom:3"));

        try {

            PendingIntent.getBroadcast(context, 0, gpsIntent, 0).send();

        } catch (PendingIntent.CanceledException e) {

            e.printStackTrace();

            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);

            Location location1 = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

            if (location1 != null) {

                locations[0] = location1.getLatitude(); // 经度

                locations[1] = location1.getLongitude(); // 纬度

            }

        }

    }

    /**
     * 获取位置经纬度坐标
     * @return 经纬度坐标latitude,longitude;
     */
    public double[] getLocations()
    {
        return locations;
    }


    private  double[]   updateWithNewLocation(Location location) {

        double[] locations =new double[2] ;

        if (location != null) {
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            locations[0]=lat;
            locations[1]=lng;
        }
        return locations;
    }

    public void setfinishLocationListener(FinishLocationListener listener)
    {
        finishLocationListener=listener;
    }

//位置信息更新时的回调接口
    public interface FinishLocationListener
    {
        void alreadyFinishLocation(Location location);
    }


    private  LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            locations=updateWithNewLocation(location);
            if(finishLocationListener!=null) {
                finishLocationListener.alreadyFinishLocation(location);
                finishLocationListener=null;
            }
        }

        public void onProviderDisabled(String provider) {
            setBestGps();
        }

        public void onProviderEnabled(String provider) {

        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
            setBestGps();
        }

    };

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值