无法加载地图.联系Google服务器时出错 这可能是一个身份验证问题

Jac*_*kWu 31 android google-maps android-fragments android-tabs

我搜索了所有的日子,我找不到答案......

一切准备就绪,但谷歌地图仍然无法显示片段与标签

我检查我已经打开谷歌地图android v2和正确的API_KEY

我不知道发生了什么!

IMG

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;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

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;

    }
}
Run Code Online (Sandbox Code Playgroud)

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> 
Run Code Online (Sandbox Code Playgroud)

的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 -->
Run Code Online (Sandbox Code Playgroud)

解:

我找到了解决方案!

如果您使用私钥库来应用API_KEY.您无法使用eclipse上传和安装应用程序.

您需要自己上传.apk文件到您的设备并安装它!

谢谢Tarsem和srikanth gr帮助!!

Tar*_*ngh 65

这听起来像你有问题你API_KEY这是从谷歌获得API访问,因此验证API_KEY,证书的指纹包名

里面也用这个 <manifest>

<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" >
    </uses-feature>
Run Code Online (Sandbox Code Playgroud)

并且还要验证:<meta-data .... >应该在<application>标签内


PS.

1.另外尝试添加以下权限

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
Run Code Online (Sandbox Code Playgroud)

2. After changing API keyAndroidManifest.xml 必由之路 Clear Application Data

清除应用程序数据:

要么Settings>Application Manager>Select Your Application > Click on Clear Data

或者 Must Uninstall The Applicationinstalling it ! 注意之前不要Re-install除非你Completely Uninstall the Application为了clear its Data completely

  • 如果您使用私钥库来应用API_KEY.您无法使用eclipse上传和安装应用程序.您需要上传.apk文件并自行安装!谢谢Tarsem和srikanth gr帮助!! (6认同)
  • 对我来说关键部分是,如果API密钥发生变化,必须清除应用程序数据.谢谢! (2认同)

Ole*_* K. 35

我花了很多时间,有太多类似的问题.

我尝试添加自己的权限,WIFI_STATE权限,但真正的问题是在应用程序数据中.

在清单中更改API密钥后,您必须 "清除应用程序的数据"(或完全重新安装).

这有助于我和我希望这篇文章能够帮助某些人.


G. *_*Kh. 10

通过向清单添加权限解决了我的问题:

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,自2014年5月起不再需要此权限. (2认同)

mos*_*kis 6

我有同样的问题,我的问题是我没有在控制台中激活服务:

  1. 转到控制台:https://code.google.com/apis/console/
  2. 转到服务部分
  3. 启用Google Maps Android API v2
  4. 按照documentacion中的所有步骤操作


Ser*_*ins 5

如果您对auth有问题,请在Logcat中检查您的包名.如果您使用Android Studio,请检查您的build.gradle.当文件包含时applicationIdSuffix '.dev'.您应该添加.dev到您的包名称.

ei包名是:

com.company.main

在API控制台中写

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