Android GPS服务标准版

作者: 鹿小纯0831 | 来源:发表于2018-09-11 11:11 被阅读7次

GPS定位系统由三部分组成,即由GPS卫星组成的空间部分,若干地面组成的控制部分和普通用户手中的接收机这三部分。对于手机用户来说,手机就是GPS定位系统的接收机,也就是说GPS定位需要手机的硬件支持GPS功能。

权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

一、LocationManager

位置管理类,其主要功能包括:

// 根据LocationProvider获取最近一次已知的Location
Location getLastKnownLocation(String provider);
//获取所有的LocationProvider列表
List<String> getAllProviders();
//根据指定条件返回最优的LocationProvider对象
String getBestProvider(Criteria criteria,boolean enabledOnly);
//根据名称来获取LocationProvider
LocationProvider getProvider(String name): 
//根据指定条件获取满足该条件的全部LocationProvider的名称
List<String>  getProviders(Criteria criteria,boolean enabledOnly): 
// 获取所有可用的LocationProvider
List<String> getProviders(boolean enabledOnly):
//判断指定名称的LocationProvider是否可用
boolean isProviderEnabled(provider): 
// 获取GPS状态
GpsStatus getGpsStatus(GpsStatus status);
//添加一个监听GPS状态的监听器
boolean addGpsStatusListener(GpsStatus.Listener listener);
//删除Gps状态监听器
void removeGpsStatusListener(GpsStatus.Listener listener): 
//通过指定的LoactionProvider周期性地获取定位信息,并通过intent启动相应的组件
void requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent): 
// 通过指定的LocationProvider周期性地获取定位信息,并触发listener所对应的触发器
void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener):
//添加一个临近警告
void addProximityAlert(double latitude,double  longitude,float radius, long expiration, PendingIntent intent);
// 删除一个临近警告
void removeProximityAlert(PendingIntent intent):

二、LocationProvider

位置提供类,其主要功能包括:

//返回该LocationProvider的精度
int getAccuracy();
// 返回该LocationProvider的名称
String getName();
//获取该LocationProvider的电源需求
int getPowerRequirement();
//获取该LocationProvider是收费的还是免费的
boolean hasMonetaryCost();
//判断该LocationProvider是否满足Criteria条件
boolean meetsCriteria(Criteria criteria) ; 
// 判断该LocationProvider是否需要访问网络基站
boolean requiresCell();
//判断该LocationProvider是否需要网络数据
boolean requiresNetwork();
//判断该LocationProvider是否需要访问基于卫星的定位系统
boolean requiresSatellite();
//判断该LocationProvider是否支持高度信息
boolean supportsAltitude();
//判断该LocationProvider是否支持方向信息
boolean supportsBearing();
// 判断该LocationProvider是否支持速度信息
boolean supportsSpeed();

三、Location

代表位置的抽象类,主要方法包括:

//获取定位信息的精度
float getAccuracy();
//获取定位信息的高度
double getAltitude();
//获取定位信息的方向
float getBearing();
//获取定位信息的纬度
getLatitude();
// 获取定位信息的经度
getLongitude();
// 获取提供该定位信息的LocationProvider
getProvider();
//获取定位信息的速度
getSpeed();
//判断该定位信息是否有精度信息
hasAccuracy();
// 判断该定位信息是否有高度信息
hasAltitude();
//判断该定位信息是否有方向信息
hasBearing();
//判断该定位信息是否有速度信息
hasSpeed();

以上三个类是Android GPS的三个核心API,用它们来获取GPS定位信息的步骤为:

  • 获取系统的LocationManager对象。
  • 使用LocationManager,通过指定LocationProvider来获取定位信息,定位信息由Location对象来表示。
  • Location中获取定位信息。

四、Criteria

除了以上三个核心类之外,Criteria这个类也很重要。
LocationManagergetBestProvider(Criteria criteria,boolean enabledOnly)用来得到符合指定条件的LocationProviderCriteria代表了一个过滤条件,提供如下常用方法来设置:

//设置对LocationProvider的精度要求
setAccuracy(int accuracy);
//设置要求LocationProvider能提供高度信息
setAltitudeRequired(boolean altitudeRequired);
//设置要求LocationProvider能提供方向信息
setBearingRequired(boolean bearingRequired);
//设置要求LocationProvider是否免费
setCostAllowed(boolean  costAllowed);
//设置要求LocationProvider的耗电量
setPowerRequirement(int level);
//设置要求LocationProvider能提供速度信息
setSpeedRequired(boolean speedRequired);

五、基本使用

    /**
     * 开始定位
     */
    public void startLocation(Context mContext, LocationCallback listener) {
        locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        String best = locationManager.getBestProvider(criteria, true);
        if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        this.listener = listener;
        locationManager.requestLocationUpdates(best, intervalTime, 0, MyLocationListener);
    }

    /**
     * 位置监听
     */
    private LocationListener MyLocationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            if (listener != null && location != null) {
                listener.onLocation(location.getLatitude() + "", location.getLongitude() + "");
            }
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

        }
    };

相关文章

网友评论

    本文标题:Android GPS服务标准版

    本文链接:https://www.haomeiwen.com/subject/tyajgftx.html