Android Map错误:无法获取连接工厂客户端(使用正确的ApiKey)

时间:2011-09-16 12:19:16

标签: android gps maps factory

MapActivity启动后会显示一个带有纬度和经度(0,0)的地图,我无法获取当前位置,因为我收到此错误:

09-16 12:06:46.515:ERROR / MapActivity(464):无法获取连接工厂客户端

apikey是正确的,我还重新安装了eclipse + android sdk并重新生成另一个debug.keystore及其相关apikey,但没有任何改变..

源是这样的(请注意,我没有在logcat System.out.println上看到println(“ * 我在这里”+ current_lat));

package it.me.map;


import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.widget.TextView;
import it.man.app.R;

public class Maps extends MapActivity 
{    
    private TextView tvName;
    private TextView tvAddress;
    private TextView tvOpenTime;

    private MapController mc;
    private MapView mapView;

    private static double current_lat;
    private static double current_long;

    private static LocationListener mNetworkListener = new LocationListener() 
{   
            @Override
            public void onLocationChanged(Location location) {
                    makeUseOfNewLocation(location);
            }

            @Override
            public void onProviderDisabled(String provider) {}

            @Override
            public void onProviderEnabled(String provider) {

            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {}

            public void makeUseOfNewLocation(Location location) {
                    current_lat = location.getLatitude();
                    current_long = location.getLongitude();
                    System.out.println("*** i'm here"+current_lat);
            }
};


   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.maps);
       mapView = (MapView) findViewById(R.id.mapview);
       mc = mapView.getController();

       LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
       mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mNetworkListener);

       GeoPoint p = new GeoPoint((int)current_lat*(1000000), (int)current_long*(1000000));            
       mc.animateTo(p);

 }

   @Override
   protected boolean isRouteDisplayed() {
       return false;
   }
}

maps.xml就是这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:enabled="true"
    android:apiKey="02pmISdykDhJpseMz_d3XLv5ojPsNW25Tz9dtdA"
    />
</RelativeLayout>

最后是AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="ir.marco.furesta"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />


    <application android:icon="@drawable/icon" android:label="@string/app_name">
  <uses-library android:name="com.google.android.maps" />
        <activity android:name=".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>
  <activity android:name=".Maps"></activity>


  <activity android:name=".NewsList"></activity>

    </application>
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
</manifest>

1 个答案:

答案 0 :(得分:-1)

我认为您忘记在清单中指定api密钥并只添加此权限

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

像这样添加api键。

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="Your api key"/>

这段代码对我有用。

    public class LocTrack extends Service implements LocationListener {

        LocationManager lm;
        public double lat, lon;

        public boolean InitGPS() {

            LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                Toast.makeText(LocTrack.this, "Please Enable GPS!", Toast.LENGTH_LONG).show();
                Intent gps = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(gps);
                return false;
            }
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, this);
            return true;
        }

        public void StopGPS() {
            lm.removeUpdates(this);
        }

        @Override
        public void onLocationChanged(Location l) {

            Storage.lat = l.getLatitude();
            Storage.lon = l.getLongitude();


            Storage.changed = true;
            Toast.makeText(LocTrack.this,"location",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            InitGPS();
        }

        @Override
        public void onProviderDisabled(String provider) {
            StopGPS();
        }

        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }


        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            super.onStartCommand(intent, flags, startId);
            InitGPS();
            return START_STICKY;
        }
    }

我用这个片段来显示地图。

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>