概述
定位类型声明:
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信号强度监听
//定义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<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信号强度监听定位位置实时监听:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复