Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我什么时候需要android.hardware.location.gps和android.hardware.location.network?_Android_Gps_Geolocation_Android Permissions_Android Gps - Fatal编程技术网

我什么时候需要android.hardware.location.gps和android.hardware.location.network?

我什么时候需要android.hardware.location.gps和android.hardware.location.network?,android,gps,geolocation,android-permissions,android-gps,Android,Gps,Geolocation,Android Permissions,Android Gps,谷歌正在通过电子邮件通知Android位置权限的更改: 我们将在2016年10月15日做出一项改变,这将影响应用程序 针对API版本21(Android 5.0,棒棒糖)或更高版本 访问\u FINE\u位置,但不明确具有 “android.hardware.location.gps”使用该功能。展望未来,这些 应用程序将可安装在没有GPS的设备上 硬件。在大多数情况下,这不会是一个问题,因为Wi-Fi和手机ID 基于位置的定位为典型操作提供了足够高的保真度 这些应用中的一个。但是,任何需要GP

谷歌正在通过电子邮件通知Android位置权限的更改:

我们将在2016年10月15日做出一项改变,这将影响应用程序 针对API版本21(Android 5.0,棒棒糖)或更高版本 访问\u FINE\u位置,但不明确具有 “android.hardware.location.gps”使用该功能。展望未来,这些 应用程序将可安装在没有GPS的设备上 硬件。在大多数情况下,这不会是一个问题,因为Wi-Fi和手机ID 基于位置的定位为典型操作提供了足够高的保真度 这些应用中的一个。但是,任何需要GPS硬件的应用程序,例如 GPS导航器,应明确添加 “android.hardware.location.gps”使用该功能来显示它们的清单

如果您的应用程序需要GPS正常工作,而您不包括 在清单声明中,您的用户可能有一个糟糕的应用程序 经验

此外,如果您正在使用fused location provider并希望接收 来自GPS的最精确位置样本(即 优先级(高精度),您必须包括 应用程序清单中的“android.hardware.location.gps”功能 确保Google Play仅将您的应用程序分发给带有GPS的设备 传感器

您可以在中阅读有关此更改的更多信息

为了从网络提供商或GPS提供商处接收位置更新,您必须通过在Android清单文件中分别声明访问粗略位置或访问精细位置权限来请求用户的权限。如果没有这些权限,您的应用程序在请求位置更新时将在运行时失败

如果同时使用网络提供商和GPS提供商,则只需请求访问位置权限,因为它包括两个提供商的权限。访问\u位置的权限仅允许访问网络\u提供商

警告:如果您的应用程序目标为Android 5.0(API级别21)或更高版本,则必须声明您的应用程序使用清单文件中的Android.hardware.location.network或Android.hardware.location.gps硬件功能,具体取决于您的应用程序是从网络_提供商还是从gps_提供商接收位置更新。如果您的应用程序从这些位置提供程序源接收到位置信息,您需要在应用程序清单中声明应用程序使用了这些硬件功能。在运行Android 5.0(API 21)之前版本的verions的设备上,请求访问\u FINE\u LOCATION或访问\u rough\u LOCATION权限包括对位置硬件功能的隐含请求。但是,请求这些权限不会自动请求Android 5.0(API级别21)及更高版本上的位置硬件功能

我正在使用融合位置提供程序,目标是API 21,并使用
ACCESS\u FINE\u location
。我并不特别关心GPS是否可用,只是报告了最准确的位置

  • 根据第一个报价,我想我不需要做任何更改
  • 根据第二句话,我想我需要
    android.hardware.location.gps
    android.hardware.location.network
    。或者这只是针对
    LocationManager
    而不是熔合位置

我需要
android.hardware.location.gps
android.hardware.location.network
吗?

第二句话告诉你,如果你特别需要一个或另一个位置提供商,你需要
android.hardware.location.gps

如果你想通过GPS进行更新,你需要
android.hardware.location.GPS
。 如果您希望通过WiFi和蜂窝网络进行更新,则需要
android.hardware.location.network

如果您希望同时从网络和GPS进行更新,则应同时包含
元素

如果未指定任何一项,则设备可能安装在没有该提供程序的设备上。例如,它可以安装在没有GPS、蜂窝网络或Wi-Fi芯片的设备上

换句话说,获取位置需要网络位置功能或GPS功能。如果不声明应用程序需要其中一个,则可能根本无法获得位置更新

API 21 vs 20及以下版本

请注意,以上仅适用于API 21及以上版本。 在API 21之前,请求
ACCESS\u rough\u LOCATION
权限意味着
LOCATION.network
功能,而请求
ACCESS\u FINE\u LOCATION
则意味着
LOCATION.gps
功能(请参阅)

目前唯一的变化是,对于API 21+,任何请求访问\u FINE\u LOCATION的应用程序都将很快可以安装在没有GPS的设备上。如果你的应用程序以前假设GPS可用(并且需要GPS),那么你需要确保明确请求
android.hardware.location.GPS


谷歌表示,网络位置提供商现在已经足够好,可以提供一个好的位置,因此,这一变化就发生了。

TL;DR:不,您不必向清单中添加
使用功能
,但根据具体情况,您可以这样做

完整答案

使用清单的功能
,只有这样Google Play才能过滤出不包含应用程序正确执行所需功能的设备。(例如,用于逐圈导航应用程序的GPS,或用于摄像头应用程序的摄像头)

仔细阅读这段引文:

任何需要GPS硬件的应用程序,如GPS导航器,都应该在其清单中明确添加“android.hardware.location.GPS”使用功能

(……)

并希望从GPS接收最准确的位置样本

正如您所提到的,您只关心FusedLocationProvider为您提供设备安装时可用的最佳位置
<uses-feature android:name="android.hardware.location.network" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />