定位类型声明:
public boolean isOpenProvider() {
//获取定位服务
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//获取当前可用的位置控制器
List<String> list = 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();*/
}
}
GPS信号强度监听
//定义LocationManageprivate 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<GpsSatellite> 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();
//创建一个迭代器保存所有卫星
Iterator<GpsSatellite> iters = 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) {
}
};
最后
以上就是老迟到衬衫最近收集整理的关于GPS信号强度与GPS定位GPS信号强度监听定位位置实时监听:的全部内容,更多相关GPS信号强度与GPS定位GPS信号强度监听定位位置实时监听内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复