Je recherche tous les jours et je ne trouve pas la réponse ...
tout est prêt, mais google map ne peut toujours pas apparaître sur le fragment avec l'onglet
Je vérifie que j'active déjà google map Android v2 et droit API_KEY
Je n'ai aucune idée de ce qui s'est passé!
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 -->
Solution:
J'ai trouvé la solution !!!
Si vous utilisez un magasin de clés privé pour appliquer API_KEY. Vous ne pouvez pas télécharger et installer d'application avec Eclipse.
Vous devez télécharger le fichier .apk sur votre appareil par vous-même et l'installer!
Merci Tarsem et srikanth gr aide !!
il semble que vous ayez un problème avec votre API_KEY
qui est obtenu auprès de Google API Access, vérifiez donc votre API_KEY
, empreintes digitales du certificat et nom du package
utilisez également ceci à l'intérieur <manifest>
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" >
</uses-feature>
et vérifiez également: <meta-data .... >
devrait être à l'intérieur <application>
tag
PS.
1. Essayez également en ajoutant l'autorisation suivante
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
2.After changing API key
dans AndroidManifest.xml
DoitClear Application Data
Pour effacer les données d'application:
Soit Allez à Settings>Application Manager>Select Your Application > Click on Clear Data
OMust Uninstall The Application
avant installing it !
Remarque Ne pas Re-install
à moins que vous Completely Uninstall the Application
afin de clear its Data completely
J'ai passé tellement de temps, il y a trop de questions similaires.
J'ai essayé d'ajouter sa propre autorisation, l'autorisation WIFI_STATE, mais le vrai problème était dans les données d'application.
Après avoir modifié la clé API dans le manifeste, vous DEVEZ "Effacer les données" de votre application (ou la réinstaller complètement).
Cela m'aide et j'espère que ce message aidera quelqu'un.
Mon problème a été résolu en ajoutant une autorisation au manifeste:
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
J'ai le même problème, et mon problème était que je n'ai pas activé le service dans la console:
Si vous rencontrez un problème avec l'authentification, vérifiez dans Logcat le nom de votre package. Si vous utilisez Android Studio consultez votre build.gradle . Lorsque le fichier contient applicationIdSuffix '.dev'
. Vous devez ajouter .dev
au nom de votre package.
e.i. le nom du package est:
com.company.main
Dans la console API, écrivez
... 9S.ME.DA.FE; com.company.main.dev
Après avoir fait tout ce que les gens ont dit aimer vérifier mon manifeste, ajouter des autorisations, créer une nouvelle clé avec le sha1 dans Eclipse, etc. et cela ne fonctionnait toujours pas, je viens de le faire:
adb uninstall com.example.hellomap
puis en exécutant à nouveau Eclipse. Il semblait que l'appareil n'obtenait pas de données complètement nouvelles. J'espère que cela t'aides.
J'ai pu utiliser la clé de débogage et charger depuis Eclipse. Il me manquait l'autorisation suivante dans mon AndroidManifest.xml
uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"
J'étais confronté au même problème dans Android Studio. Google maps ne s'affichait pas lorsqu'il était connecté au Android débogueur.
Je l'ai corrigé en ajoutant l'empreinte SHA1 pour le magasin de clés de débogage situé dans ~/.Android/debug.keystore
. Je pense que ce fichier de clés est généré par défaut (pas sûr cependant).
La commande suivante dans Terminal a fonctionné pour obtenir l'empreinte SHA1:
keytool -list -v -keystore ~/.Android/debug.keystore
Lorsqu'il vous demande un mot de passe, ne tapez rien, appuyez simplement sur Entrée. (A travaillé dans mon cas)
Ajoutez cette empreinte digitale à votre clé API pour les applications Android dans la console des développeurs.
À votre santé!
J'ai résolu le problème en donnant l'autorisation dans le manifeste
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
Après avoir examiné de nombreux cas et exécuté avec succès les cartes, il est important de garder ces éléments à l'esprit:
J'avais configuré de nombreux services, notamment l'API Google Maps v2 (et non Google Maps Android API v2) qui était en conflit. Après avoir supprimé le service indésirable et généré une nouvelle clé, y compris dans le manifeste, une nouvelle installation, la carte est apparue sur l'appareil.
J'ai également rencontré le même problème lors de l'utilisation de Android Studio
.
J'ai renvoyé toutes les solutions, mais cela ne fonctionnait toujours pas.
Le problème était que j'avais changed
mon package name
après la configuration initiale du projet. La modification du nom du package s'est reflétée dans Manifest
, mais dans build.gradle
fichier l'ancien nom du package était là.
Dès que j'ai changed package name
dans build.gradle, Map commence à fonctionner.
J'espère que cela aide quelqu'un.
Beaucoup d'entre eux m'ont aidé mais le principal problème était que je n'avais pas la signature correcte. J'utilise Xamarin et, par conséquent, il n'est pas intégré à l'EDI, donc lorsque je générais la clé à l'aide de keytool, il n'entrerait jamais dans l'application. J'ai dû ajouter ce qui suit dans mon fichier .csproj:
<PropertyGroup>
<AndroidKeyStore>True</AndroidKeyStore>
<AndroidSigningKeyStore>maps.keystore</AndroidSigningKeyStore>
<AndroidSigningStorePass>Android</AndroidSigningStorePass>
<AndroidSigningKeyAlias>androiddebugkey</AndroidSigningKeyAlias>
<AndroidSigningKeyPass>Android</AndroidSigningKeyPass>
</PropertyGroup>
J'étais confronté au même problème. J'ai essayé plusieurs solutions - aucune n'a fonctionné pour moi. Ce qui a fonctionné pour moi a été de générer une nouvelle clé API et EFFACER les DONNÉES du service Google play sur mon appareil.
Mon erreur la plus étrange que j'ai faite jusqu'à présent a été d'obtenir le code SHA1 à partir de debug.keystore.
Je pensais qu'il n'avait pas de mot de passe, mais le mot de passe était Android
Je ne sais pas si cela aide quelqu'un, mais cela m'a aidé. De plus, utilisez un nom de package complet, vous pouvez le trouver dans Java fichier de code source. Par exemple, il y a le mien: com.example.erikas.mapsdemo (ressemble à : package com.example.erikas.mapsdemo;)
Donc, lorsque vous essayez d'obtenir une clé API, utilisez une entrée comme celle-ci:
XX:XX:XX:XX:XX:17:C9:22:BB:BD:7C:87:12:83:2D:XX:XX:XX:XX:XX;com.example.erikas.mapsdemo
Donc ma propre erreur était un mauvais code SHA1 et un mauvais paquet. Mais heureusement - je l'ai compris après 2 jours de maux de tête! :RÉ
J'ai eu le même problème. J'ai vérifié les journaux et il a été dit "Échec de l'authentification sur le serveur". J'ai donc vérifié www.console.developers.google.com et découvert que le nom du package était incorrect. (Ce nom de paquet a été écrit automatiquement) Je l'ai écrit correctement et tout fonctionne bien.
L'erreur pour moi était que j'exécutais la configuration de débogage lorsque je viens d'ajouter la configuration de la version à la Google Developers Console. J'ai donc suivi ces étapes:
Obtenez le sha1 pour votre keystore de débogage en utilisant:
keytool -list -v -keystore ~ / .Android/debug.keystore -alias androiddebugkey -storepass Android -keypass Android
Goto https://console.developers.google.com et ajoutez le package sha1 +.
Ajoutez votre API_KEY à votre fichier AndroidManifest.xml.
Tout ce que vous avez à faire est de: utiliser la clé de débogage dans votre code; désinstaller l'application; installez la nouvelle application avec la clé de débogage.
Dans mon cas, ce qui a fonctionné, c'est que j'ai dû l'installer via la ligne de commande:
adb install /path/to/app/MyApp.apk
Lors du débogage, j'ai dû ajouter une clé API supplémentaire pour le ~/.Android/debug.keystore
Ce magasin de clés est configuré automatiquement pour vous et le mot de passe est "Android"?
J'ai fait face au même problème, j'ai une solution pour cela, j'ai essayé de créer une clé api de débogage à partir de différents comptes Google avec le même nom de package. Étape pour éliminer le bogue: 1.Retirez la clé API indésirable avec le même nom de package dans un compte Google différent. 2.Veuillez conserver la génération de clés Api dans un seul compte pour résoudre ce problème. Merci. Essaye ça.
Dans IntelliJ ..si vous êtes sûr que vous SHA1
la touche est correcte, API key
ne manque pas,
Permission
et toute configuration dans Manifest
est correcte.
Peut-être que vous devez clic droit sur votre Google-Play-Services-lib et le compiler à nouveau
J'ai fait toutes les choses et cela fait l'affaire pour moi.
J'étais coincé sur cette question pendant environ une semaine. J'ai donc commencé à utiliser un véritable appareil. Mais un jour, j'essaie de définir le magasin de clés de débogage Custon (Eclipse, Fenêtre -> Préférences -> Android -> Build -> Magasin de débogage Cusom) sur le même que celui par défaut. Et tout fonctionne Bien sûr, j'ai d'abord une clé sur une console Google.
J'espère que cela vous aidera!
Au cas où, si rien (indiqué ci-dessus) ne fonctionnait, il y avait une bonne possibilité que vous utilisiez un mauvais fichier debug.keystore pour générer une empreinte digitale. Si vous avez plusieurs fichiers debug.keystore sur votre ordinateur, assurez-vous que vous utilisez le bon debug.keystore pour générer l'empreinte SHA1.
Liste de contrôle: 1. Vérifiez l'autorisation dans Android Manifest for READ_GSERVICES
<uses-permission Android: name = "com.google.Android.providers.gsf.permission.READ_GSERVICES" />
Effacez les données d'application si vous avez apporté des modifications au manifeste.
Vérifiez debug.keystore dans votre dossier .Android.
Mon problème a été résolu simplement en remplaçant debug.keystore situé dans le dossier .Android par debug.keystore de votre application.