最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android6.0获取GPS定位和获取位置权限和位置信息的方法
时间:2022-06-25 22:51:15 编辑:袖梨 来源:一聚教程网
1.添加权限--6.0之后要动态获取,下面会说
2.直接上代码,不多说,代码中注释很详细。
private static final int BAIDU_READ_PHONE_STATE = 100;//定位权限请求 private static final int PRIVATE_CODE = 1315;//开启GPS权限
/** * 检测GPS、位置权限是否开启 */ public void showGPSContacts() { lm = (LocationManager) this.getSystemService(this.LOCATION_SERVICE); boolean ok = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); if (ok) {//开了定位服务 if (Build.VERSION.SDK_INT >= 23) { //判断是否为android6.0系统版本,如果是,需要动态添加权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PERMISSION_GRANTED) {// 没有权限,申请权限。 ActivityCompat.requestPermissions(this, LOCATIONGPS, BAIDU_READ_PHONE_STATE); } else { getLocation();//getLocation为定位方法 } } else { getLocation();//getLocation为定位方法 } } else { Toast.makeText(this, "系统检测到未开启GPS定位服务,请开启", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(intent, PRIVATE_CODE); } } /** * 获取具体位置的经纬度 */ private void getLocation() { // 获取位置管理服务 LocationManager locationManager; String serviceName = Context.LOCATION_SERVICE; locationManager = (LocationManager) this.getSystemService(serviceName); // 查找到服务信息 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度 criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗 String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息 /**这段代码不需要深究,是locationManager.getLastKnownLocation(provider)自动生成的,不加会出错**/ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } Location location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置 updateLocation(location); } /** * 获取到当前位置的经纬度 * @param location */ private void updateLocation(Location location) { if (location != null) { double latitude = location.getLatitude(); double longitude = location.getLongitude(); LogUtil.e("维度:" + latitude + "n经度" + longitude); } else { LogUtil.e("无法获取到位置信息"); } } /** * Android6.0申请权限的回调方法 */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { // requestCode即所声明的权限获取码,在checkSelfPermission时传入 case BAIDU_READ_PHONE_STATE: //如果用户取消,permissions可能为null. if (grantResults[0] == PERMISSION_GRANTED && grantResults.length > 0) { //有权限 // 获取到权限,作相应处理 getLocation(); } else { showGPSContacts(); } break; default: break; } }
onRequestPermissionsResult 这个方法主要是动态获取6.0权限,返回时的回调,我这里需求是获取权限之后获取到当前位置的经纬度详细信息
3.下面是当点击获取GPS定位,跳转到系统开关,ActivityResult回调,我这里做的是必须要开启GPS权限,没有开启会一直让用户开启权限,怎么决定,看具体需求
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case PRIVATE_CODE: showContacts(); break; } }
4.动态权限设置添加多条权限
static final String[] LOCATIONGPS = new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE};
注:代码很详细!基础知识写的不好,大佬勿喷,谢谢!
相关文章
- 江南百景图碎金泉怎么样 12-26
- 江南百景图游宴廊怎么样 江南百景图游宴廊建筑介绍 12-26
- 江南百景图碎金泉怎么样 江南百景图碎金泉建筑介绍 12-26
- 炉石传说兑换码大全 12-26
- 重返未来1999趋光性研究夜幕之外怎么玩 趋光性夜幕之外活动介绍 12-26
- 光遇12.26大蜡烛在哪里 光遇12月26日大蜡烛位置攻略 12-26