这个问题在这里已有答案:
我在Firebase的崩溃报告部分收到了以下运行时异常:
java.lang.SecurityException:“gps”位置提供程序需要ACCESS_FINE_LOCATION权限。
正如this answer所述,可以通过在运行时请求权限来解决异常。
然而,实际上让我感到困惑的是,在我的Manifest文件中,我只请求COARSE LOCATION权限,而FINE LOCATION永远不会出现。
AndroidManifest.xml中
... // other permissions
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
... // no sign of fine location
为什么缺少权限会抛出这样的异常?
注意:这是应用程序自启动以来首次崩溃。崩溃发生在Android 4.4.2的ALLVIEW VivaH7 API 19上。 (在任何其他设备或API上没有类似的崩溃)
此外,COARSE LOCATION被认为是危险的许可以及精细的位置吗?因此,我应该在运行时请求COARSE LOCATION的权限吗?
ACCESS_FINE_LOCATION
和ACCESS_COARSE_LOCATION
都是危险的许可。
从NetworkProvider获取位置时,需要ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION。
而,
从Gps Provider获取位置时,需要ACCESS_FINE_LOCATION。
因此,如果您从NetworkProvider
以及GpsProvider
获得位置,您必须在ACCESS_FINE_LOCATION
中添加AndroidManifest.xml
权限,
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />