定位类型声明:
public boolean isOpenProvider() { //获取定位服务 locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //获取当前可用的位置控制器 Listlist = locationManager.getProviders(true); if (list.contains(LocationManager.GPS_PROVIDER)) { //是否为GPS位置控制器 provider = LocationManager.GPS_PROVIDER; } else { return false; } return true; }
private void startLocationService() { //检查位置提供器是否开启,如果开启则给provider赋值 if (isOpenProvider()) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } //绑定定位事件,监听位置是否改变 //第一个参数为控制器类型第二个参数为监听位置变化的时间间隔(单位:毫秒) //第三个参数为位置变化的间隔(单位:米)第四个参数为位置监听器 locationManager.requestLocationUpdates(provider, 2000, (float) 5, locationListener); //监听卫星信号强度 locationManager.addGpsStatusListener(statusListener); } else { /*Toast.makeText(this, "请检查网络或GPS是否打开", Toast.LENGTH_LONG).show();*/ } }
//定义LocationManage
private LocationManager locationManager;
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//监听卫星信号强度
locationManager.addGpsStatusListener(statusListener)
/**
* 卫星信号强度监听
*/
第一种:监听卫星信噪比
GpsStatus.Listener statusListener = new GpsStatus.Listener() {
@Override
public void onGpsStatusChanged(int event) {
switch (event) {
//卫星状态改变
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
//获取当前状态
@SuppressLint("MissingPermission") GpsStatus gpsStatus = locationManager.getGpsStatus(null);
//获取卫星颗数的默认最大值
int maxSatellites = gpsStatus.getMaxSatellites();
//获取所有的卫星
Iterator iters = gpsStatus.getSatellites().iterator();
//卫星颗数统计
int count = 0;
signalCont = 0;//每监听一次对之前的信号清0
while (iters.hasNext() && count <= maxSatellites) {
count++;
GpsSatellite s = iters.next();
//卫星的信噪比
float snr = s.getSnr();
signalCont = signalCont + snr;
}
break;
default:
break;
}
}
};
第二种:监听有效微信颗数
/** * gps状态监听类,用于gps获取gps信号强弱 */ GpsStatus.Listener gpsStatusListener = new GpsStatus.Listener() { @Override public void onGpsStatusChanged(int event) { switch (event) { //第一次定位 case GpsStatus.GPS_EVENT_FIRST_FIX: Log.i(TAG, "第一次定位"); break; //卫星状态改变 case GpsStatus.GPS_EVENT_SATELLITE_STATUS: try { Log.i(TAG, "卫星状态改变"); //获取当前状态 @SuppressLint("MissingPermission") GpsStatus gpsStatus = locationManager.getGpsStatus(null); //获取卫星颗数的默认最大值 int maxSatellites = gpsStatus.getMaxSatellites(); //创建一个迭代器保存所有卫星 Iteratoriters = gpsStatus.getSatellites().iterator(); int totalCount = 0; int validCount = 0; while (iters.hasNext() && totalCount <= maxSatellites) { GpsSatellite s = iters.next(); //已定位卫星数量 if (s.usedInFix()) { validCount++; } totalCount++; } System.out.println("搜索到:" + totalCount + "颗卫星"); System.out.println("有效卫星:" + validCount + "颗"); } catch (Exception e) { e.printStackTrace(); } break; //定位启动 case GpsStatus.GPS_EVENT_STARTED: Log.i(TAG, "定位启动"); break; //定位结束 case GpsStatus.GPS_EVENT_STOPPED: Log.i(TAG, "定位结束"); break; } } };
一般来说有效卫星有7颗以上,才可以获取到GPS位置信息。
//当位置发生变化时,会触发这个监听 private LocationListener locationListener = new LocationListener() { /** * 位置信息变化时触发 * @param location */ @Override public void onLocationChanged(Location location) { //实时获取Location 位置信息 } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } /** * GPS开启时触发 * @param provider */ @Override public void onProviderEnabled(String provider) { } /** * GPS禁用时触发 * @param provider */ @Override public void onProviderDisabled(String provider) { } };