5

我想在启用我的位置图层的谷歌地图上显示用户的位置,但此功能需要“ ACCESS_FINE_LOCATION ”权限才能从 GPS 获取位置。是否可以阻止GoogleMap尝试从 GPS 获取位置?

如果我删除 Manifest 文件中的“ 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)
4

2 回答 2

4

您可以使用该LocationSource模式来提供您自己的位置,这些位置可能来自任何地方。LocationSource是一个接口,你可以在一些可以提供位置数据的对象上实现它。您setLocationSource()GoogleMap. 您在您的设备上实现activate()deactivate()方法LocationSource将被调用,以让您知道何时应该开始和停止推送位置。当您获得位置修复时,您会调用onLocationChanged()提供的OnLocationChangedListener.

此示例项目演示了LocationSource.

于 2013-06-13T14:23:21.693 回答
3

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

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

如果我删除 Manifest 文件中的“ACCESS_FINE_LOCATION”权限,一旦我尝试显示地图,应用程序就会崩溃

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

现在您只能遵循 CommonsWare 的回答,但我也鼓励您在gmaps-api-issues上创建一个功能请求,因此GoogleMap.setMyLocationEnabled当您仅请求ACCESS_COARSE_LOCATION权限但切换到LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY.

于 2013-06-13T20:45:00.163 回答