31 votes

Impossible de charger la carte. Erreur de contact avec les serveurs Google. Il s'agit probablement d'un problème d'authentification

Je cherche tous les jours et je ne trouve pas la réponse...

tout est prêt mais google map ne peut toujours pas s'afficher sur le fragment avec l'onglet

Je vérifie que j'ai déjà activé google map Android v2 et la bonne API_KEY.

Je n'ai aucune idée de ce qui s'est passé !

http://imgur.com/8NOuqOW

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 keystore privé pour appliquer API_KEY. Vous ne pouvez pas télécharger et installer l'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 aider ! !!

64voto

Pooja Kansal Points 6049

Il semble que vous ayez un problème avec votre API_KEY qui est obtenu à partir de Google Accès à l'API Vérifiez donc votre API_KEY , empreintes digitales des certificats y nom du paquet

utilisez aussi ceci à l'intérieur <manifest>

<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" >
    </uses-feature>

et aussi vérifier : <meta-data .... > devrait être à l'intérieur <application> étiquette


PS.

1. Essayez également d'ajouter la permission suivante

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

2. After changing API key en AndroidManifest.xml Must Clear Application Data

Pour effacer les données de l'application :

Soit Aller à Settings>Application Manager>Select Your Application > Click on Clear Data

Ou Must Uninstall The Application avant installing it ! Nota Ne fais pas ça. Re-install à moins que vous Completely Uninstall the Application afin de clear its Data completely

35voto

Oleksii Kropachov Points 1698

J'ai passé tellement de temps, il y a trop de questions similaires.

J'ai essayé d'ajouter une permission propre, la permission WIFI_STATE, mais le vrai problème se trouvait dans les données de l'application.

Après avoir changé la clé API dans le manifeste, vous MUST "Effacer les données" de votre application (ou réinstaller complètement).

Cela m'aide et j'espère que ce post aidera quelqu'un.

10voto

G. Kh. Points 115

Mon problème a été résolu en ajoutant une permission au manifeste :

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

6voto

moskis Points 623

J'ai le même problème, et mon problème est que je n'ai pas activé le service dans la console :

  1. Allez à la console : https://code.google.com/apis/console/
  2. Aller à services section
  3. Activer Google Maps Android API v2
  4. Suivez toutes les étapes de la documentacion

5voto

Serafins Points 529

Si vous avez un problème avec l'authentification, vérifiez dans Logcat le nom de votre paquet. Si vous utilisez Android Studio vérifiez votre build.gradle . Lorsque le fichier contient applicationIdSuffix '.dev' . Vous devez ajouter .dev à votre nom de paquet.

Par exemple, le nom du paquet est :

com.company.main

Dans la console API, écrivez

...9S.ME.DA.FE;com.company.main.dev

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X