谷歌地图API Android v2 - “ACCESS_FINE_LOCATION”权限需要启用我的位置图层。

5
我想在Google地图上显示用户位置,使用“我的位置”图层,但这需要获取GPS定位的“ACCESS_FINE_LOCATION”权限。 是否可以防止GoogleMap尝试从GPS获取位置?
如果我在清单文件中删除“ACCESS_FINE_LOCATION”权限,一旦我尝试显示地图,应用程序就会崩溃,并显示以下错误:
E/AndroidRuntime(28578): FATAL EXCEPTION: main
E/AndroidRuntime(28578): java.lang.SecurityException: Client must have ACCESS_FINE_LOCATION permission to request PRIORITY_HIGH_ACCURACY locations.
E/AndroidRuntime(28578):    at android.os.Parcel.readException(Parcel.java:1425)
E/AndroidRuntime(28578):    at android.os.Parcel.readException(Parcel.java:1379)
E/AndroidRuntime(28578):    at bbj.a(SourceFile:424)
E/AndroidRuntime(28578):    at bbn.a(SourceFile:232)
E/AndroidRuntime(28578):    at maps.al.b.j(Unknown Source)
E/AndroidRuntime(28578):    at uh.h(SourceFile:642)
E/AndroidRuntime(28578):    at un.a(SourceFile:399)
E/AndroidRuntime(28578):    at uj.a(SourceFile:158)
E/AndroidRuntime(28578):    at ui.handleMessage(SourceFile:111)
E/AndroidRuntime(28578):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(28578):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(28578):    at android.app.ActivityThread.main(ActivityThread.java:5041)
E/AndroidRuntime(28578):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(28578):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(28578):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(28578):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(28578):    at dalvik.system.NativeStart.main(Native Method)
2个回答

4
您可以使用“LocationSource”模式提供自己的位置,可以来自任何地方。 "LocationSource"是一个接口,您需要在某个可以提供位置数据的对象上实现它。您可以在“GoogleMap”上使用“setLocationSource()”进行注册。您在“LocationSource”上实现“activate()”和“deactivate()”方法,以让您知道何时应该开始和停止推送位置。当您获得位置修复时,可以在提供的“OnLocationChangedListener”上调用“onLocationChanged()”。
这个示例项目演示了如何使用“LocationSource”。

现在Google建议使用GoogleApiClient来处理位置。这里我有一个开放性问题,可以提供悬赏:https://dev59.com/r14c5IYBdhLWcg3wSIgs - Daniele B

3

是否可以防止GoogleMap尝试从GPS获取位置?

LocationSource的默认实现不一定需要使用GPS来返回准确的位置。

如果我在清单文件中删除“ACCESS_FINE_LOCATION”权限,当我尝试显示地图时,应用程序会崩溃

这是因为默认实现使用LocationClientLocationRequest.PRIORITY_HIGH_ACCURACY

目前你只能按照CommonsWare的回答去做,但我也鼓励你在gmaps-api-issues上创建一个功能请求,以便默认实现在你仅请求ACCESS_COARSE_LOCATION权限时,不会在执行GoogleMap.setMyLocationEnabled时失败,而是切换到LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY


现在Google建议使用GoogleApiClient来处理位置信息。这里我有一个悬赏的开放性问题:https://dev59.com/r14c5IYBdhLWcg3wSIgs - Daniele B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接