Android(安卓)原生GPS定位 判断室内室外
16lz
2021-01-26
对于需要定位的情况,也不一定一定要集成高德和百度,android 原生也有自己GPS 定位,但是GPS 在室内是定位不到的,只能在室外定位。这样的话,通过GPS 定位,我们可以知道用户在室内还是室外,可以做适当的逻辑处理。
权限:
动态申请:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(mContext, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1); }
初始化:
private void initLocation() { locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); }
位置回调:
/** * 在室外才有这个回调,室内没有 * */LocationListener listener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {}}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}};
设置监听:
locationManager .requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, 0, listener);
这里 MIN_TIME:
/** * 5S */private static final int MIN_TIME = 1000 * 5 ;
由于室内没有回调,室外才有。我们可以监控回调烂判断是否在室内。
方法:在回调里每次都延迟消息发送(时间大于回调时间),延迟发送消息前,先remove 消息,当在室内的时候,这个延迟发送的时间就会成功发送(因为室外不停的回调,会不断的remove 消息,消息最终都不能到达)
代码:
public void onLocationChanged(Location location) {ToastUtils.show("在室外了");handler.removeMessages(WHAT);handler.sendEmptyMessageDelayed(WHAT,6000); }
/** * 检测GPS Location 回调 */private Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what){case WHAT:ToastUtils.show("现在在室内了。。。。。");break;}}};
OK。
更多相关文章
- 视频播放拖动进度时间定位不准问题
- Android集成百度定位SDK实现获取定位地址
- Android(安卓)GPS定位实现
- android中google“定位查询”
- Android(安卓)webview解决JS报错chromium: [INFO:CONSOLE(1)] "U
- Wifi定位Gps
- Android手机定位案例代码
- Android(安卓)PopupWindow
- 高德Titus