2013-04-04 192 views
2

我在实现Google Maps片段时遇到了严重问题到我的Android应用程序。基本上, 我遵循了Google网站上的所有说明。在获得Google Maps API v2密钥,设置布局和清单,导入google-play-service库并使用谷歌示例代码启动GoogleMap之后,我发现模拟器不支持Google Maps API v2,所以我上线并下载最新版本的com.android.vending.apk和com.google.android.gms.apk,然后使用adb install将它们安装到我的模拟器中(与此处的情况相同:This app won't run unless you update Google Play Services (via Bazaar))。安装完成后,我终于可以实现MapFragment的界面。Google地图中的错误,“无法找到com.google.android.gsf.gservices的提供者信息”和“无法找到com.google.settings的提供者信息”

但是当我在Android模拟器(OS 4.1.2; API 16)中运行它时,地图上没有任何工作。 “无法找到com.google.android.gsf.gservices的提供者信息”错误不断出现。我不确定它是否与无线提供商有关。有谁知道为什么它一直出来?任何建议将不胜感激!

解释一些早期的问题:地图显示正确。但地图上的按钮(“+”和“ - ”)完全不起作用。我也不能点击或拖动地图。每当我点击任何按钮,拖动或双击地图,它都没有给我任何回应,但LogCat中的错误消息显示“无法找到com.google.android.gsf.gservices的提供者信息”。

这是我在AndroidManifest.xml代码:

 <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.trackmyexercise" 
     android:versionCode="1" 
     android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="12" 
     android:targetSdkVersion="17" /> 

    <permission 
     android:name="com.example.trackmyexercise.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="com.example.trackmyexercise.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" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.trackmyexercise.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="AIzaSyANkR-VPI4zy5IpYGK2Z0T1omLq3C46rFE" /> 
    </application> 

</manifest> 

这里是我的布局代码:

<?xml version="1.0" encoding="utf-8"?> 
<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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

    <fragment 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/recordsButton" 
     android:layout_alignParentTop="true" /> 

</RelativeLayout> 

这里是我的MainActivity代码:

package com.example.trackmyexercise; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.FragmentTransaction; 
import android.view.Menu; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 

public class MainActivity extends Activity { 
    GoogleMap myMap; 
    MapFragment myMapFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 

     myMapFragment = MapFragment.newInstance(); 
     FragmentTransaction fragmentTransaction = getFragmentManager() 
       .beginTransaction(); 
     fragmentTransaction.add(R.id.map, myMapFragment); 
     fragmentTransaction.commit(); 

     myMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
       .getMap(); 
     this.setUpMapIfNeeded(); 
     myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    private void setUpMapIfNeeded() { 
     if (myMap == null) { 
      myMap = ((MapFragment) getFragmentManager().findFragmentById(
        R.id.map)).getMap(); 
     if (myMap != null) { 
     } 
    } 
    } 
} 
+0

所以问题是,按钮不起作用?地图显示是否正确? – 2013-04-04 22:41:50

+0

尼斯详细的问题,但我们不知道什么是不工作 – 2013-04-04 22:49:12

+0

地图本身不工作。基本上它只是一张图片,它上面的按钮都不起作用。 – 2013-04-05 17:56:27

回答

4

错误就出在这里 - >android:name="com.example.tackmyexercise.permission.MAPS_RECEIVE"

我想这是你的软件包名称不正确。

应该"com.example.trackmyexercise.permission.MAPS_RECEIVE"

+0

谢谢你的评论。我没有注意到这个拼写错误。 – 2013-04-05 19:03:29

+1

但即使我将其更改为正确的一个,同样的错误仍然不断弹出。 – 2013-04-05 19:10:42

+0

这真的很奇怪。尝试卸载和resinstalling。 – androidlab 2013-04-06 10:07:02

0

我遵循同样的教程,有同样的问题,因为你,并设法通过执行以下操作来获得一个工作地图:

  • 右键单击项目
  • 选择'项目属性'
  • 在左侧菜单中选择'Android'
  • 在'项目构建目标'下确保选择了'Android XX'(我使用4.2。 2),而不是谷歌的API
  • 另外,请确保您的Android虚拟设备具有“安卓x.x中”作为目标版本,而不是谷歌的API

为我工作,希望它可以帮助你!

相关问题