安卓GPS
GPS
一:使用
在Activity中添加权限
1
二:查看定位信息
//获取GPS服务 LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //获取关于定位设置信息(LocationProvider) //LocationManager.PASSIVE_PROVIDER --定位系统由其他系统提供 //LocationManager.NETWORK_PROVIDER --定位系统由网络提供 //LocationManager.GPS_PROVIDER --定位系统由GPS提供 LocationProvider lp = lm.getProvider(LocationManager.GPS_PROVIDER); StringBuilder sb = new StringBuilder(); sb.append("getAccuracy精度:" + lp.getAccuracy() + " "); sb.append("getName名称:" + lp.getName() + " "); sb.append("getPowerRequirement电源需求:" + lp.getPowerRequirement() + " "); sb.append("hasMonetaryCost是否收费:" + lp.hasMonetaryCost() + " "); sb.append("requiresCell是否需要访问网络基站:" + lp.requiresCell() + " "); sb.append("requiresNetwork是否需要网络:" + lp.requiresNetwork() + " "); sb.append("requiresSatellite是否需要访问基于卫星的定位系统:" + lp.requiresSatellite() + " "); sb.append("supportsAltitude是否支持高度:" + lp.supportsAltitude() + " "); sb.append("supportsBearing是否支持方向:" + lp.supportsBearing() + " "); sb.append("supportsSpeed是否支持速度:" + lp.supportsSpeed() + " "); Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show(); Log.e("aaa", "aaa" + sb.toString());
三:查看定位信息设置过滤条件
//获取GPS服务 LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //获取关于定位设置信息(LocationProvider) LocationProvider lp = lm.getProvider(LocationManager.GPS_PROVIDER); //初始化过滤条件 Criteria criteria = new Criteria(); criteria.setCostAllowed(false);//设置是否收费 criteria.setSpeedAccuracy(Criteria.ACCURACY_LOW);//设置速度精度 criteria.setBearingAccuracy(Criteria.ACCURACY_LOW);//设置方向精度 criteria.setAccuracy(Criteria.ACCURACY_LOW);//设置定位精度 criteria.setVerticalAccuracy(Criteria.ACCURACY_LOW);//设置垂直定位精度 criteria.setHorizontalAccuracy(Criteria.ACCURACY_LOW);//设置水平定位精度 criteria.setPowerRequirement(Criteria.POWER_HIGH);//设置耗电量 criteria.setAltitudeRequired(false);//设置是否提供高度信息 criteria.setBearingRequired(false);//设置是否提供方向信息 criteria.setSpeedRequired(false);//设置是否提供速度信息 //当前定位设置是否满足过滤条件 Toast.makeText(this, "meetsCriteria是否满足过滤条件:" + lp.meetsCriteria(criteria), Toast.LENGTH_SHORT).show();
四:查看是否打开GPS
//获取GPS服务 LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); //查看是否打开GPS Toast.makeText(this, "GPS是否打开:" + lm.isProviderEnabled(LocationManager.GPS_PROVIDER), Toast.LENGTH_SHORT).show();
五:强制打开GPS
//方法一:强制帮用户打开GPS 5.0以前可用 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(MainActivity.this, 0, gpsIntent, 0).send(); } catch (PendingIntent.CanceledException e) { e.printStackTrace(); } //方法二 Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(intent, 0);
六:实时获取定位
//获取GPS服务 LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location lc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); updateShow(lc); //参数一:使用的定位服务 //参数二:最短时间触发 //参数三:最短距离触发 //参数四:位置改变的监听器 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 8, new LocationListener() { //当位置改变时触发 @Override public void onLocationChanged(Location location) { updateShow(location); } //当GPS状态发生变化时触发 @Override public void onStatusChanged(String provider, int status, Bundle extras) {} //当LocationProvider可用时 @Override public void onProviderEnabled(String provider) { updateShow(lm.getLastKnownLocation(provider)); } //当LocationProvider不可用时 @Override public void onProviderDisabled(String provider) { updateShow(null); } }); //定义一个更新显示的方法 private void updateShow(Location location) { if (location != null) { StringBuilder sb = new StringBuilder(); sb.append("当前的位置信息: "); sb.append("精度:" + location.getLongitude() + " "); sb.append("纬度:" + location.getLatitude() + " "); sb.append("高度:" + location.getAltitude() + " "); sb.append("速度:" + location.getSpeed() + " "); sb.append("方向:" + location.getBearing() + " "); sb.append("定位精度:" + location.getAccuracy() + " "); Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show(); Log.e("aaa", sb.toString()); } else { Toast.makeText(this, "当前的位置信息:无", Toast.LENGTH_SHORT).show(); Log.e("aaa", "当前的位置信息:无"); } }
七:LocationManager其他方法
GpsStatus.Listener listener=new GpsStatus.Listener() { @Override public void onGpsStatusChanged(int i) { Log.e("aaa","状态码"+i); } }; //添加一个GPS状态监听器 lm.addGpsStatusListener(listener); //获取所有的LocationProvider列表 lm.getAllProviders(); //根据指定条件返回最优LocationProvider lm.getBestProvider(criteria,true); //获取最后一次一直的location lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); //根据名称获取LocationProvider lm.getProvider(LocationManager.GPS_PROVIDER); //获取所有LocationProvider lm.getProviders(true); //获取指定条件的LocationProvider lm.getProviders(criteria,true); //判断LocationProvider是否可用 lm.isProviderEnabled(LocationManager.GPS_PROVIDER); //删除一个GPS状态监听器 lm.removeGpsStatusListener(listener);
八:地域围栏
首先创建一个接收器
public class RemoveReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { boolean isEnter = intent.getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING, false); if (isEnter) { Toast.makeText(context, "你已到达目的地附近", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context, "你已离开目的地附近", Toast.LENGTH_LONG).show(); } } }
在AndroidManifest中添加接收器
创建地域围栏
//获取GPS服务 LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); double longitude = -122.0840; double latitude = 37.42199833; float radius = 10; //定义半径,米 Intent intent = new Intent(this, RemoveReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(this, -1, intent, 0); //参数一:固定点的精度 //参数二:固定点的纬度 //参数三:半径长度 //参数四:经过多少秒后过期,-1表示永不过期 //参数五:触发对应的intent组件 lm.addProximityAlert(latitude, longitude, radius, -1, pi);
————————————————
版权声明:本文为CSDN博主「江川一梦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45468359/article/details/108761708