Google 地图的 MNC 权限问题
Permission issue on MNC with Google Maps
我创建了一个最小示例来演示这个问题中的问题
https://github.com/dbachelder/MNCMapTest
我 运行 在一个真实的应用程序中解决了这个问题,但创建了这个项目来演示最小的例子。
该项目是使用 Android Studio 1.3.1
创建的
这是一个针对跨国公司的 "Google Maps Activity" 项目。
我做的唯一改变是改变
compile 'com.android.support:appcompat-v7:23.+'
至
compile 'com.android.support:appcompat-v7:22.+'
因为 23.+ 似乎还不存在...(不确定为什么它被项目创建向导使用)
启动时出现此异常。
Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
at com.google.maps.api.android.lib6.d.t.a(Unknown Source)
at com.google.maps.api.android.lib6.d.ft.a(Unknown Source)
at com.google.maps.api.android.lib6.d.aj.a(Unknown Source)
at com.google.maps.api.android.lib6.d.ai.a(Unknown Source)
at com.google.android.gms.maps.internal.x.onTransact(SourceFile:107)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.maps.internal.IMapFragmentDelegate$zza$zza.onCreateView(Unknown Source)
at com.google.android.gms.maps.SupportMapFragment$zza.onCreateView(Unknown Source)
at com.google.android.gms.dynamic.zza.zzb(Unknown Source)
at com.google.android.gms.dynamic.zza.zza(Unknown Source)
at com.google.android.gms.dynamic.zza.onCreateView(Unknown Source)
at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:924)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1116)
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1218)
at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2170)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)
... 19 more
如您在清单中所见:
https://github.com/dbachelder/MNCMapTest/blob/master/app/src/main/AndroidManifest.xml
存在问题的权限。
模拟器是运行最新版本的M.
为了让地图在 M 中发挥出色,我是否缺少某些东西?就像在膨胀包含地图的布局之前请求许可一样?还是我只是仓促行事,我需要等待更长的时间才能让所有这些都准备好进行测试?
对于围绕地图构建的应用程序,在启动时必须请求存储权限似乎是一个恼人的限制。
更新: 现在有一个项目的 b运行ch 工作..这是差异:
https://github.com/dbachelder/MNCMapTest/pull/1/files
Is there something I am missing to get maps to play nice in M?
从 MNC v2 开始,WRITE_EXTERNAL_STORAGE
现在是 dangerous
权限。您不仅必须将它包含在清单中,还需要在运行时向用户请求它。 the developer preview documentation.
中(在某种程度上)涵盖了此过程
作为权宜之计,您应该能够进入您应用的“设置”页面并手动打开此权限,但我还没有尝试过。
Like ask for the permission before I inflate the layout containing the map?
是的,在尝试调用任何需要该权限的代码之前,您需要请求(并获得)用户的许可。这可能意味着在您尝试使用 Maps V2 执行任何操作之前。
Or am I just jumping the gun and I need to wait a bit longer for all of this to be ready for testing?
哦,好吧,也可能存在错误,但您的示例应用程序未在运行时请求权限,所以我将从这里开始。
近期为疲惫的旅行者更新,我遇到了同样的问题,最终从MapView移动到SupportMapFragment(由于需要延迟初始化MapView直到外部存储权限被授予,而SupportMapFragment你没有调度生命周期回调)。
这相当简单(由于我们使用子片段管理器,对我们来说有点复杂,但没有什么是不可克服的),除了你必须小心处理片段恢复状态的情况:比如用户授予权限,地图正在显示,后台应用程序转到设置以撤销权限。回到应用程序,框架将恢复旧片段 + UI 状态,因为地图片段之前在 UI 堆栈中,地图片段现在创建并在到达 SupportMapFragment#onCreateView 时崩溃由于没有权限。
我有充分的理由相信,到 M 上线时,这将不是问题。 GPS 将在不久的将来更新为不需要此许可的地图,因此您唯一需要为这个问题烦恼的是在这个过渡阶段。
我创建了一个最小示例来演示这个问题中的问题
https://github.com/dbachelder/MNCMapTest
我 运行 在一个真实的应用程序中解决了这个问题,但创建了这个项目来演示最小的例子。
该项目是使用 Android Studio 1.3.1
创建的这是一个针对跨国公司的 "Google Maps Activity" 项目。
我做的唯一改变是改变
compile 'com.android.support:appcompat-v7:23.+'
至
compile 'com.android.support:appcompat-v7:22.+'
因为 23.+ 似乎还不存在...(不确定为什么它被项目创建向导使用)
启动时出现此异常。
Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
at com.google.maps.api.android.lib6.d.t.a(Unknown Source)
at com.google.maps.api.android.lib6.d.ft.a(Unknown Source)
at com.google.maps.api.android.lib6.d.aj.a(Unknown Source)
at com.google.maps.api.android.lib6.d.ai.a(Unknown Source)
at com.google.android.gms.maps.internal.x.onTransact(SourceFile:107)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.maps.internal.IMapFragmentDelegate$zza$zza.onCreateView(Unknown Source)
at com.google.android.gms.maps.SupportMapFragment$zza.onCreateView(Unknown Source)
at com.google.android.gms.dynamic.zza.zzb(Unknown Source)
at com.google.android.gms.dynamic.zza.zza(Unknown Source)
at com.google.android.gms.dynamic.zza.onCreateView(Unknown Source)
at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:924)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1116)
at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1218)
at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2170)
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)
... 19 more
如您在清单中所见:
https://github.com/dbachelder/MNCMapTest/blob/master/app/src/main/AndroidManifest.xml
存在问题的权限。
模拟器是运行最新版本的M.
为了让地图在 M 中发挥出色,我是否缺少某些东西?就像在膨胀包含地图的布局之前请求许可一样?还是我只是仓促行事,我需要等待更长的时间才能让所有这些都准备好进行测试?
对于围绕地图构建的应用程序,在启动时必须请求存储权限似乎是一个恼人的限制。
更新: 现在有一个项目的 b运行ch 工作..这是差异: https://github.com/dbachelder/MNCMapTest/pull/1/files
从 MNC v2 开始,Is there something I am missing to get maps to play nice in M?
WRITE_EXTERNAL_STORAGE
现在是 dangerous
权限。您不仅必须将它包含在清单中,还需要在运行时向用户请求它。 the developer preview documentation.
作为权宜之计,您应该能够进入您应用的“设置”页面并手动打开此权限,但我还没有尝试过。
Like ask for the permission before I inflate the layout containing the map?
是的,在尝试调用任何需要该权限的代码之前,您需要请求(并获得)用户的许可。这可能意味着在您尝试使用 Maps V2 执行任何操作之前。
Or am I just jumping the gun and I need to wait a bit longer for all of this to be ready for testing?
哦,好吧,也可能存在错误,但您的示例应用程序未在运行时请求权限,所以我将从这里开始。
近期为疲惫的旅行者更新,我遇到了同样的问题,最终从MapView移动到SupportMapFragment(由于需要延迟初始化MapView直到外部存储权限被授予,而SupportMapFragment你没有调度生命周期回调)。
这相当简单(由于我们使用子片段管理器,对我们来说有点复杂,但没有什么是不可克服的),除了你必须小心处理片段恢复状态的情况:比如用户授予权限,地图正在显示,后台应用程序转到设置以撤销权限。回到应用程序,框架将恢复旧片段 + UI 状态,因为地图片段之前在 UI 堆栈中,地图片段现在创建并在到达 SupportMapFragment#onCreateView 时崩溃由于没有权限。
我有充分的理由相信,到 M 上线时,这将不是问题。 GPS 将在不久的将来更新为不需要此许可的地图,因此您唯一需要为这个问题烦恼的是在这个过渡阶段。