我搜索了所有的日子,我找不到答案......
一切准备就绪但谷歌地图仍然无法显示片段
我检查我已经开启谷歌地图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 建議先在之前就初始化好 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 -->
解决方案:
我找到了解决方案!!!
如果您使用私钥库来应用API_KEY。您无法使用eclipse上传和安装应用程序。
您需要自己将.apk文件上传到您的设备并安装它!
感谢Tarsem和srikanth gr帮助!!
答案 0 :(得分:65)
听起来您的API_KEY
问题是从Google API访问获得的,因此请验证您的API_KEY
,证书指纹和包名称
也在<manifest>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" >
</uses-feature>
并验证:<meta-data .... >
应位于<application>
代码
<强> PS。强>
1。还可以尝试添加以下权限
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
After changing API key
必须 AndroidManifest.xml
2。 Clear Application Data
清除申请数据:
转到Settings>Application Manager>Select Your Application > Click on Clear Data
Must Uninstall The Application
installing it !
之前注意除Re-install
Completely Uninstall the Application
以外clear its Data completely
{{1}} 1}}
答案 1 :(得分:35)
我花了很多时间,有太多类似的问题。
我尝试添加自己的权限WIFI_STATE权限,但真正的问题出在应用程序数据中。
在清单中更改API密钥后,您必须“清除数据”(或完全重新安装)。
这对我有帮助,我希望这篇文章可以帮助别人。
答案 2 :(得分:10)
通过向清单添加权限解决了我的问题:
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
答案 3 :(得分:6)
我遇到同样的问题,我的问题是我没有在控制台中激活服务:
答案 4 :(得分:5)
如果您对auth有问题,请在Logcat中检查您的包名。
如果您使用 Android Studio ,请查看 build.gradle 。当文件包含applicationIdSuffix '.dev'
时。您应该将.dev
添加到您的包名称中。
E.I。包名是:
com.company.main
在API控制台中编写
... 9S.ME.DA.FE; com.company.main.dev
答案 5 :(得分:4)
在做完所有人说要检查我的清单,添加权限,在eclipse中使用sha1创建新密钥等等之后,它仍然无法正常工作:
adb uninstall com.example.hellomap
然后再次运行eclipse。看起来该设备并没有获得全新的数据。希望这会有所帮助。
答案 6 :(得分:2)
我能够使用调试密钥并从eclipse加载。我在AndroidManifest.xml
uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"
答案 7 :(得分:1)
在审核了大量案例并成功运行地图之后,请记住以下几点:
答案 8 :(得分:1)
我配置了很多服务,包括谷歌地图API v2(不是谷歌地图Android API v2),这是相互矛盾的。删除不需要的服务并生成新密钥后,包括清单中的清除安装,地图就会显示在设备上。
答案 9 :(得分:1)
我已通过在清单中提供权限来修复此问题
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
答案 10 :(得分:1)
我在Android Studio中遇到了同样的问题。连接到android调试器时,谷歌地图不会显示。
我通过为位于~/.android/debug.keystore
的调试密钥库添加SHA1指纹来修复它。我认为这个密钥库是默认生成的(虽然不确定)。
终端中的以下命令用于获取SHA1指纹:
keytool -list -v -keystore ~/.android/debug.keystore
当它要求输入密码时,不要输入任何内容,只需按Enter即可。 (在我的情况下工作)
将此指纹添加到开发人员控制台中Android应用程序的API密钥中。
干杯!
答案 11 :(得分:0)
使用Android Studio
时,我也遇到了同样的问题。
我已经提到了所有的解决方案,但它仍然没有用。
问题是我在初始项目设置后changed
package name
。更改包名称反映在Manifest
中,但在build.gradle
文件中存在旧包名称。
一旦build.gradle中有changed package name
,Map就会开始工作。
希望它有所帮助。
答案 12 :(得分:0)
检查清单: 1.检查Android Manifest for READ_GSERVICES
的权限&LT; uses-permission android:name =“com.google.android.providers.gsf.permission.READ_GSERVICES”/&gt;
如果您在清单中做了一些更改,请清除应用程序数据。
检查.android文件夹中的debug.keystore。
我的问题只是通过替换位于的debug.keystore来解决 你的应用程序的debug.keystore .android文件夹。
答案 13 :(得分:0)
我被困在这个问题上大约一个星期。所以我开始使用真正的设备。但有一天,我尝试将Custon调试密钥库(Eclipse,Window - &gt; Preferences - &gt; Android - &gt; Build - &gt; Cusom调试密钥库)设置为默认值。一切都变得有效了。当然,首先我在谷歌控制台上有一把钥匙。
希望这会有所帮助!
答案 14 :(得分:0)
我遇到了同样的问题,为此有解决方案,我尝试使用相同的包名从不同的Google帐户创建调试api密钥。 步骤清除错误: 1.在不同的Google帐户中删除具有相同包名称的不需要的api密钥。 2.请在单个帐户中维护Api密钥生成以解决此问题。 谢谢。试试这个。
答案 15 :(得分:0)
调试时,我需要为~/.android/debug.keystore
此密钥库会自动为您设置,密码为&#34; android&#34;?
答案 16 :(得分:0)
我遇到了同样的问题。我检查了日志,并说有“服务器上的身份验证失败”。所以,我检查了www.console.developers.google.com,发现包名不正确。 (这个包名是自动编写的)我写得正确,一切正常。
答案 17 :(得分:0)
我迄今为止犯下的最奇怪的错误是从debug.keystore获取SHA1代码。
我虽然没有密码,但密码是 android
不确定它是否对任何人有帮助,但它对我有帮助。加上使用完整的包名,你可以在java源代码文件中找到它。例如,有我的: com.example.erikas.mapsdemo (看起来像:package com.example.erikas.mapsdemo;)
因此,当您尝试获取API密钥时,请使用以下输入:
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
答案 18 :(得分:0)
在IntelliJ中..如果您确定SHA1
键是正确的,API key
不会丢失,
Permission
并且Manifest
中的任何设置都是正确的。
也许您必须在Google-Play-Services-lib上右键单击并再次编译
我做了所有的事情,这对我有用。
答案 19 :(得分:0)
我的错误是,当我刚刚将发布配置添加到Google Developers Console时,我正在运行调试配置。所以,我按照以下步骤操作:
使用以下命令获取调试密钥库的sha1:
keytool -list -v -keystore~ / .android / debug.keystore -alias androiddebugkey -storepass android -keypass android
转到https://console.developers.google.com并添加sha1 +包。
将API_KEY添加到AndroidManifest.xml文件中。
答案 20 :(得分:0)
其中许多帮助了我,但主要问题是我没有正确的签名。我正在使用Xamarin,因此它没有内置到IDE中,所以当我使用keytool生成密钥时,它永远不会进入应用程序。我必须在.csproj文件中添加以下内容:
<PropertyGroup>
<AndroidKeyStore>True</AndroidKeyStore>
<AndroidSigningKeyStore>maps.keystore</AndroidSigningKeyStore>
<AndroidSigningStorePass>android</AndroidSigningStorePass>
<AndroidSigningKeyAlias>androiddebugkey</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>android</AndroidSigningKeyPass>
</PropertyGroup>
答案 21 :(得分:0)
如果没有(如上所述)有效,很可能您使用了错误的debug.keystore文件来生成指纹。如果您的计算机中有多个debug.keystore文件,请确保使用正确的debug.keystore来生成SHA1指纹。
答案 22 :(得分:0)
您所要做的就是:在代码中使用调试密钥;卸载应用;使用调试密钥安装新应用程序。
答案 23 :(得分:0)
在我的情况下,有效的是我必须通过命令行安装它:
adb install /path/to/app/MyApp.apk