无法加载地图。 联系Google服务器时出错。 这可能是一个身份validation问题
我search整天,我找不到答案…
一切准备就绪,但谷歌地图仍然不能显示在选项卡上的片段
我检查我已经打开谷歌地图android v2和正确的API_KEY
我不知道发生了什么事!
MainActivity.java:
public class MainActivity extends FragmentActivity implements ActionBar.TabListener { SectionsPagerAdapter mSectionsPagerAdapter; ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String titles[] = { this.getString(R.string.title_around), this.getString(R.string.title_map), this.getString(R.string.title_favorite), this.getString(R.string.title_achievement), }; final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); for (int i = 0; i < titles.length; i++) { actionBar.addTab(actionBar.newTab().setText(titles[i]) .setTabListener(this)); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) { mViewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // TODO 在這邊決定哪個位置要給什麼 View(Fragment) Fragment fragment = null; // TODO build議先在之前就初始化好 4 個 Fragment switch (position) { case 0: fragment = new AroundFragment(); break; case 1: fragment = new MapsFragment(); break; case 2: fragment = new FavoriteFragment(); break; case 3: fragment = new AchievementFragment(); break; default: break; } return fragment; } @Override public int getCount() { return 4; } @Override public CharSequence getPageTitle(int position) { // TODO 在這邊決定每一個 View 的 title switch (position) { case 0: return getString(R.string.title_around); case 1: return getString(R.string.title_map); case 2: return getString(R.string.title_favorite); case 3: return getString(R.string.title_achievement); } return null; } } }
MapsFragment.java:
public class MapsFragment extends Fragment{ static final LatLng NKUT = new LatLng(23.979548, 120.696745); private GoogleMap map; SupportMapFragment mMapFragment; public MapsFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.map_fragment,container, false); map = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); mMapFragment = SupportMapFragment.newInstance(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.map,mMapFragment); fragmentTransaction.commit(); return rootView; } }
Map_fragment.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> </RelativeLayout>
的Manifest.xml:
<!-- Google Map --> <permission android:name="com.jertt.yummymap.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="com.jertt.yummymap.permission.MAPS_RECEIVE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <!-- The following two permissions are not required to use Google Maps Android API v2, but are recommended. --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- end --> <!-- Google Map API Key --> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="key" /> <!-- end -->
解:
我find了解决scheme!
如果您使用私钥存储来应用API_KEY。 你不能用eclipse上传和安装应用程序。
您需要自行上传.apk文件到您的设备并安装它!
谢谢Tarsem和srikanth gr帮助!
听起来您的API_KEY
是从Google API Access获取的 ,因此您的API_KEY
, 证书指纹和软件包名称
也可以在<manifest>
使用这个
<uses-feature android:glEsVersion="0x00020000" android:required="true" > </uses-feature>
并validation: <meta-data .... >
应该在<application>
标签内
PS。
1.也可以尝试添加以下权限
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
2.在AndroidManifest.xml
After changing API key
, 必须 Clear Application Data
清除应用程序数据:
转到Settings>Application Manager>Select Your Application > Click on Clear Data
或者在installing it !
之前Must Uninstall The Application
installing it !
注意除非Completely Uninstall the Application
才能clear its Data completely
否则不要Re-install
我花了这么多时间,有太多类似的问题。
我试图添加自己的权限,WIFI_STATE权限,但真正的问题是在应用程序数据。
在清单中更改API密钥后, 必须 “清除”应用程序的数据(或者完全重新安装)。
这有助于我,我希望这篇文章能帮助别人。
我的问题是通过添加清单的权限解决的:
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
我有同样的问题,我的问题是,我没有在控制台中激活服务:
- 转到控制台: https : //code.google.com/apis/console/
- 转到服务部分
- 启用Google Maps Android API v2
- 按照documentacion中的所有步骤操作
如果您对auth有问题,请在Logcat中检查您的软件包名称。 如果您使用Android Studio,请检查您的build.gradle 。 当文件包含applicationIdSuffix '.dev'
。 您应该将.dev
添加到您的包名称。
ei包名是:
com.company.main
在API控制台写入
… 9S.ME.DA.FE; com.company.main.dev
做了所有人都说的喜欢检查我的清单,添加权限,在eclipse中使用sha1制作一个新的密钥等,它仍然不工作,我只是做了:
adb uninstall com.example.hellomap
然后再次运行eclipse。 这似乎是设备没有得到全新的数据。 希望这可以帮助。
我能够使用debugging密钥,并从日食加载。 我在AndroidManifest.xml
错过了以下权限
uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"
在审查了很多案例并成功运行地图之后,这些事情很重要:
- 使用android api 17,模拟器和项目
- 引用google服务
- 如果需要使用android支持
- 在库中使用以下顺序:src,gen,google apis,android支持,依赖项和私有库
- 使用正确的API密钥
- 清除数据,重新安装应用程序。
我configuration了许多服务,包括Google Maps API v2(而不是Google Maps Android API v2),这些服务存在冲突。 删除不需要的服务并生成一个新的密钥,包括在清单中,干净的安装,地图出现在设备上。
我通过在清单中给予许可来解决这个问题
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
我在Android Studio中面临同样的问题。 当连接到androiddebugging器时,Google地图不会显示出来。
我通过添加位于~/.android/debug.keystore
debugging密钥库的SHA1指纹来修复它。 我认为这个密钥库是默认生成的(不知道如何)。
terminal中的以下命令用于获取SHA1指纹:
keytool -list -v -keystore ~/.android/debug.keystore
当它要求input密码时,不要input任何东西,只需按回车即可。 (在我的情况下工作)
在开发人员控制台中将此指纹添加到Android应用程序的API密钥。
干杯!
在我的情况是什么工作,我不得不通过命令行安装它:
adb安装/path/to/app/MyApp.apk
你所要做的就是:在代码中使用debugging密钥; 卸载应用程序; 使用debugging密钥安装新的应用程序。
如果没有(上述)工作,很可能是您使用了错误的debug.keystore文件来生成指纹。 如果您的计算机上有多个debug.keystore文件,请确保使用正确的debug.keystore来生成SHA1指纹。
其中很多帮助我,但主要问题是我没有正确的签署。 我使用Xamarin,因此它不是内置在IDE中,所以当我使用keytool生成密钥时,它永远不会进入应用程序。 我不得不在我的.csproj文件中添加以下内容:
<PropertyGroup> <AndroidKeyStore>True</AndroidKeyStore> <AndroidSigningKeyStore>maps.keystore</AndroidSigningKeyStore> <AndroidSigningStorePass>android</AndroidSigningStorePass> <AndroidSigningKeyAlias>androiddebugkey</AndroidSigningKeyAlias> <AndroidSigningKeyPass>android</AndroidSigningKeyPass> </PropertyGroup>
我错误的是当我刚刚将发布configuration添加到Google Developers Console时,我正在运行debuggingconfiguration。 所以,我遵循这些步骤:
-
使用以下命令获取debugging密钥库的sha1:
keytool -list -v -keystore〜/ .android / debug.keystore -alias androiddebugkey -storepass android -keypass android
-
将您的API_KEY添加到您的AndroidManifest.xml文件中。
在IntelliJ ..如果你确定你的SHA1
键是正确的, API key
不会丢失,
Permission
和Manifest
任何设置都是正确的。
也许你必须右键点击你的Google-Play-Services-lib并重新编译
我已经做了所有的事情,这对我来说是诀窍。
我迄今为止最奇怪的错误是从debug.keystore获取SHA1代码。
我虽然没有密码,但密码是Android
不知道它是否有助于任何人,但它帮助了我。 加上使用完整的包名称,你可以在java源代码文件中find它。 例如,有我的: com.example.erikas.mapsdemo (看起来像:package com.example.erikas.mapsdemo;)
所以,当你试图获得一个API密钥,使用这样的input:
XX:XX:XX:XX:XX:17:C9:22:BB:BD:7C:87:12:83:2D:XX:XX:XX:XX:XX;com.example.erikas.mapsdemo
所以我自己的错误是一个错误的SHA1代码和错误的包。 但幸运的是 – 我头痛2天后就明白了! :d
debugging时,我需要为~/.android/debug.keystore
添加一个额外的API密钥
这个密钥库是自动为你设置的,密码是“android”?
我面临同样的问题,有解决这个问题,我试图从不同的谷歌帐户使用相同的包名称创builddebuggingAPI密钥。 清除错误的步骤:1.在不同的Google帐户中删除具有相同包名的不需要的api密钥。 2.请在单一帐户中维护Api密钥生成来解决此问题。 谢谢。 尝试这个。
我被困在这个问题上一个星期左右。 所以我开始使用真实的设备。 但有一天,我试着将Custondebugging密钥库(Eclipse,Window – > Preferences – > Android – > Build – > Cusom debug keystore)设置为默认值。 而且都成为工作。 当然,首先我在谷歌控制台上有一个关键。
希望这会有所帮助!
我面临同样的问题。 我尝试了几个解决scheme – 没有为我工作。 我的工作是生成一个新的API密钥,并清除我的设备上的Google play服务的数据 。
检查清单:1.在Android Manifest中检查READ_GSERVICES的权限
<uses-permission android:name =“com.google.android.providers.gsf.permission.READ_GSERVICES”/>
-
如果您在清单中做了一些更改,请清除应用程序数据。
-
检查.android文件夹中的debug.keystore。
我的问题已经解决了,只需要通过debug.keystorereplace位于.android文件夹的debug.keystore。
我也遇到同样的问题,而使用Android Studio
。
我已经提到所有的解决scheme,但仍然没有工作。
问题是我在初始项目设置后changed
我的package name
。 更改包名称反映在Manifest
,但在build.gradle
文件中,旧包名称在那里。
一旦我在build.gradle中changed package name
,Map就开始工作了。
希望它可以帮助别人。
我有同样的问题。 我检查了日志,有人说“服务器validation失败”。 所以,我查了一下www.console.developers.google.com,发现包名是不正确的。 (这个软件包的名字是自动写的)我写得很对,一切正常。