mat*_*ttm 31 gps android geolocation android-permissions android-gps
Google会通过电子邮件通知Android位置权限的更改:
我们将在2016年10月15日进行更改,这将影响使用ACCESS_FINE_LOCATION但未明确拥有"android.hardware.location.gps"使用功能的API版本21(Android 5.0,Lollipop)或更高版本的应用.展望未来,这些应用程序可以安装在没有GPS硬件的设备上.在大多数情况下,这不会成为问题,因为基于Wi-Fi和基于Cell-ID的位置为这些应用的典型操作提供了足够高的保真度.但是,任何需要GPS硬件的应用程序(例如GPS导航仪)都应该明确地将"android.hardware.location.gps"使用功能添加到其清单中.
如果您的应用需要GPS才能正常运行且您的清单声明中未包含,则您的用户可能会遇到较差的应用体验.
此外,如果您正在使用融合位置提供商并希望从GPS接收最准确的位置样本(即使用PRIORITY_HIGH_ACCURACY),则必须在应用清单中包含"android.hardware.location.gps"功能,以确保Google Play只会将您的应用分发给配备GPS传感器的设备.
您可以在Android开发者帮助中心中详细了解此更改.
要从NETWORK_PROVIDER或GPS_PROVIDER接收位置更新,您必须通过在Android清单文件中分别声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限来请求用户的权限.没有这些权限,您的应用程序将在请求位置更新时在运行时失败.
如果您同时使用NETWORK_PROVIDER和GPS_PROVIDER,则只需要请求ACCESS_FINE_LOCATION权限,因为它包含两个提供程序的权限.ACCESS_COARSE_LOCATION的权限仅允许访问NETWORK_PROVIDER.
警告:如果您的应用针对Android 5.0(API级别21)或更高版本,则必须声明您的应用使用清单文件中的android.hardware.location.network或android.hardware.location.gps硬件功能,具体取决于您的应用程序从NETWORK_PROVIDER或GPS_PROVIDER接收位置更新.如果您的应用从这些位置提供商来源中收到位置信息,则需要声明该应用在您的应用清单中使用这些硬件功能.在Android 5.0(API 21)之前运行版本的设备上,请求ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限包括对位置硬件功能的隐含请求.但是,请求这些权限不会自动请求Android 5.0(API级别21)及更高版本上的位置硬件功能.
我正在使用融合位置提供程序,目标是API 21,并使用ACCESS_FINE_LOCATION.我没有特别关心GPS是否可用,只是报告了最准确的位置.
android.hardware.location.gps和android.hardware.location.network.或者这仅适用于LocationManager融合位置?我需要android.hardware.location.gps和android.hardware.location.network不?
Tan*_*.7x 18
第二个引号是你必须要么告诉你,android.hardware.location.network或者android.hardware.location.gps,如果你特别需要一个或另一个位置提供.
如果您想通过GPS进行更新,则需要android.hardware.location.gps.如果您想通过WiFi和蜂窝网络进行更新,则需要android.hardware.location.network.
如果您想要从网络和GPS进行更新,则应包含这两个<uses-feature>元素.
如果您未指定任何一个,则您的设备可能安装在没有该提供商的设备上.例如,它可以安装在没有GPS,蜂窝网络或Wi-Fi芯片的设备上.
换句话说,获取位置需要网络位置功能或GPS功能.如果您未声明您的应用程序需要其中一个,则可能根本无法获得位置更新.
API 21 vs 20及以下
请注意,以上仅适用于API 21及更高版本.在API 21之前,请求ACCESS_COARSE_LOCATION许可暗示了该location.network功能,请求ACCESS_FINE_LOCATION暗示该location.gps功能(请参阅参考资料<uses-feature>).
现在唯一的变化是,对于API 21+,任何请求的应用程序ACCESS_FINE_LOCATION很快就可以安装在没有GPS的设备上.如果您的应用程序之前认为GPS可用(并且需要GPS),则需要确保您有明确的请求android.hardware.location.gps.
谷歌表示,网络位置提供商现在已经足够好,可以提供优质的地理位置,因此也就是变化.
Bud*_*ius 13
TL; DR:不,你不必添加uses-feature到你的清单,但你可以依赖.
完整答案:
uses-feature清单只是为了让Google Play可以过滤掉不包含应用程序正确执行所必需的功能的设备.(例如GPS用于转弯导航应用程序,或相机用于相机应用程序).
仔细阅读这句话:
任何需要GPS硬件的应用程序,例如GPS导航仪,都应该明确地将"android.hardware.location.gps"使用功能添加到其清单中
(......)
并希望从GPS接收最准确的位置样本
如您所述,您只关心FusedLocationProvider为您提供安装设备的最佳位置.这意味着,即使您正在请求PRIORITY_HIGH_ACCURACY,您的应用可能会安装在不包含GPS的设备上,并且永远不会像GPS一样准确,或者甚至(在某些非常罕见的情况下)安装在设备上不包含任何位置提供者.
编辑:
基于第二个引用,我想我需要android.hardware.location.gps和android.hardware.location.network.或者这仅适用于LocationManager而不是融合位置?
我刚刚开始研究文档https://developer.android.com/guide/topics/manifest/uses-feature-element.html#hw-features,发现它非常有趣,有三种可能性:
基于此,如果您的应用程序无法在没有任何形式的位置的情况下工作,您应该使用第一个android.hardware.location,否则,如果您的应用程序使用位置但它对其功能不是必不可少的,您可以自由地不包含任何内容
快速简单的解决方案:
应用程序需要通过GPS使用android.hardware.location.gps进行更新.如果您想通过WiFi和蜂窝网络进行更新,则需要android.hardware.location.network.
根据您的位置数据要求,在您的清单文件中添加以下行:
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助..
| 归档时间: |
|
| 查看次数: |
19105 次 |
| 最近记录: |