Android之如何判断定位是否开启及定位模式

1、关于Android系统中不同的定位模式

Android系统中包括3中定位模式:

  使用GPS、WLAN和移动网络 使用WLAN和移动网络 仅使用GPS
截图
特点

同时使用GPS、WIFI及基站定位,速度快、精度高,室内定位效果好。

缺点:耗流量、耗电量

只使用WIFI和基站定位,需要WIFI或者基站才行,室内效果好。

缺点:依赖WIFI或基站,精度一般

不依赖WIFI和基站,室内效果差,户外可靠性好。

缺点:室内效果差

代码
LocationManager.GPS_PROVIDER = true;
LocationManager.NETWORK_PROVIDER = true;
LocationManager.GPS_PROVIDER = false;
LocationManager.NETWORK_PROVIDER = true;
LocationManager.GPS_PROVIDER = true;
LocationManager.NETWORK_PROVIDER = false;
是否打开定位服务
Settings.Secure.LOCATION_MODE = 3
Settings.Secure.LOCATION_MODE = 2
Settings.Secure.LOCATION_MODE = 1

注:上面的“代码”指的是执行结果,代码如下:

1 Log.e("David", "GPS是否打开 " + locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER));
2 Log.e("David", "网络定位是否打开 " + locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER));

2、判断用户是否打开系统定位服务

方法一:

下面的代码,在API大于等于19时,返回的locationMode与用户的选择息息相关,如上图。

当定位服务关闭时,Settings.Secure.LOCATION_MODE = 0;

复制代码
 1 public boolean isLocationEnabled() {
 2     int locationMode = 0;
 3     String locationProviders;
 4     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
 5         try {
 6             locationMode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE);
 7         } catch (Settings.SettingNotFoundException e) {
 8             e.printStackTrace();
 9             return false;
10         }
11         return locationMode != Settings.Secure.LOCATION_MODE_OFF;
12     } else {
13         locationProviders = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
14         return !TextUtils.isEmpty(locationProviders);
15     }
16 }
复制代码
方法二:

使用locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)和locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER),

有任何一个返回true,则可说明系统定位服务是开启的。

3、判断APP是否获得定位权限

方法一:

使用如下代码可判断当前APP是否获得定位权限,二者获得其一即可认为获得定位权限

1 checkPermissionGranted(Manifest.permission.ACCESS_FINE_LOCATION)
2 checkPermissionGranted(Manifest.permission.ACCESS_COARSE_LOCATION)
3 private boolean checkPermissionGranted(String permission) {
4     return this.checkPermission(permission, Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED;
5 }
方法二:

在API>=23的Android系统中,可以使用ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 

方法三:
1 PackageManager pkgMgr = getPackageManager();
2 return pkgMgr.checkPermission(permission, getPackageName()) == PackageManager.PERMISSION_GRANTED;

要注意的是,方法一和三在应用targetSdkVerison<23时,固定返回true,无论应用是否获得授权。如果要在API<23时正常使用,建议使用如下方法四;

方法四:

使用系统提供的方法: 

1 PermissionChecker.checkPermission(this, permission, Process.myPid(), Process.myUid(), getPackageName()) == PackageManager.PERMISSION_GRANTED;

这个方法在23前后都可以使用,但是最好是做版本判断,大于等于23时使用ActivityCompat.checkSelfPermission(),其他的使用方法四。

4、跳转到系统定位服务设置页面

1 PermissionChecker.checkPermission(this, permission, Process.myPid(), Process.myUid(), getPackageName()) == PackageManager.PERMISSION_GRANTED;

感谢http://www.cnblogs.com/wlrhnh/p/7389930.html


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
定位不准可能有多种原因,以下是一些可能的解决方案: 1. 检查应用权限:在 Android 系统中,应用需要获取定位权限才能进行定位。如果你的应用没有获取定位权限,那么定位可能会不准确。在百度地图 JavaScript API 中,定位权限由浏览器控制,通常情况下浏览器会自动提示用户是否授权定位权限。 2. 检查定位设置:如果你的手机定位设置不正确,那么定位也可能会不准确。请确保你的手机 GPS 和网络定位功能已开启,同时在百度地图 JavaScript API 中,你也可以设置定位模式定位精度。 3. 检查定位场景:不同的定位场景可能需要使用不同的定位方式。例如,室内定位和室外定位需要使用不同的定位方式。如果你的应用在室内定位时出现定位不准确的情况,那么可能需要切换到使用 Wi-Fi 或蓝牙等方式进行室内定位。 4. 检查定位算法:百度地图采用了多种不同的定位算法,例如 GPS 定位、基站定位、Wi-Fi 定位等。在定位不准确的情况下,可以尝试切换到使用其他定位算法,以获取更准确的定位结果。 5. 检查定位数据:定位不准确可能是由于定位数据错误或过期导致的。在百度地图 JavaScript API 中,你可以通过添加定位数据源、设置定位间隔等方式来获取更准确的定位数据。 希望以上解决方案能够帮到你,如果问题仍未解决,请提供更多详细信息,我将尽力帮助你解决问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值