Android 原生GPS定位 判断室内室外

    对于需要定位的情况,也不一定一定要集成高德和百度,android 原生也有自己GPS 定位,但是GPS 在室内是定位不到的,只能在室外定位。这样的话,通过GPS 定位,我们可以知道用户在室内还是室外,可以做适当的逻辑处理。

权限:

  <!-- 这个权限用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 允许程序访问CellID或WiFi热点来获取粗略的位置 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

动态申请:

  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() {
		@Override
		public void onLocationChanged(Location location) {
		
	
			}
		}

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			
		}

		@Override
		public void onProviderEnabled(String provider) {
			
		}

		@Override
		public 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())
	{
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what)
			{
				case WHAT:
					ToastUtils.show("现在在室内了。。。。。");
					break;

			}
		}
	};

OK。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值