我有一個簡單的應用程序,應該顯示設備在地圖上的位置。該應用程序似乎工作除了地圖不加載,而是一個灰色的網格。我做了一些日誌記錄並查看了堆棧跟蹤。它提到MapActivity無法獲得連接工廠客戶端。 我已看過幾個線程,但我找不到答案。map not loading
一旦應用程序正在運行,它只是在onDraw和onLocationChanged之間循環,無休止地。我創建了一個MapView apiKey,清單中也有正確的權限。任何想法我可以做什麼?謝謝。
[編輯]我已經走了一圈外藏漢,由於GPS沒有在建築:)
[EDIT2]我也想再生一個不同的MD5指紋生成另一個apikey但密鑰工具生成相同md5指紋。它別名亞光已經存在。
[edit3]我還通過在keytool中使用不同的別名生成了不同的MD5指紋。這使得不同的API密鑰,不幸的是它仍然不起作用
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content" android:gravity="fill">
<com.google.android.maps.MapView
android:id="@+id/myGMap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="0??????syQI//C13Y-pRUNaA0a_??????pr86jE2w"
/>
<EditText android:id="@+id/edittext1"
android:inputType="text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="CLOSE"
android:layout_alignParentRight="true"
android:id="@+id/close" ></Button>
</RelativeLayout>
。
<?xml version="1.0" ?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tecmark"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".WcFinderActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<uses-library android:name="com.google.android.maps" />
</application>
</manifest>
。
import java.util.List;
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 com.google.android.maps.Overlay;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ZoomControls;
public class WcFinderActivity extends MapActivity implements LocationListener {
/** Called when the activity is first created. */
private MapView gMapView = null;
private MapController mc = null;
private Drawable defaultMarker = null;
private GeoPoint p = null;
private double latitude = 18.9599990845;
private double longitude = 72.819999694;
private Context mContext = this;
private static final String TAG = "WcFinderActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e(TAG, "**********inside oncreate");
EditText editText = (EditText)findViewById(R.id.edittext1);
// Creating and initializing Map
gMapView = (MapView) findViewById(R.id.myGMap);
p = new GeoPoint((int) (latitude * 1000000), (int) (longitude * 1000000));
gMapView.setSatellite(true);
mc = gMapView.getController();
mc.setCenter(p);
mc.setZoom(14);
// Add a location mark
MyLocationOverlay myLocationOverlay = new MyLocationOverlay();
List<Overlay> list = gMapView.getOverlays();
list.add(myLocationOverlay);
// Adding zoom controls to Map
ZoomControls zoomControls = (ZoomControls) gMapView.getZoomControls();
zoomControls.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
gMapView.addView(zoomControls);
gMapView.displayZoomControls(true);
// Getting locationManager and reflecting changes over map if distance travel by
// user is greater than 500m from current location.
Log.e(TAG, "**********about to call getSystemService");
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Log.e(TAG, "**********about to call requestLocationUpdates");
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
Button close = (Button)findViewById(R.id.close);
close.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.e(TAG,"clicked close");
finish();
}});
}
/* This method is called when use position will get changed */
public void onLocationChanged(Location location) {
if (location != null) {
Log.e(TAG, "**********inside onLocationChanged");
double lat = location.getLatitude();
double lng = location.getLongitude();
p = new GeoPoint((int) lat * 1000000, (int) lng * 1000000);
mc.animateTo(p);
}
}
public void onProviderDisabled(String provider) {
// required for interface, not used
Log.e(TAG, "**********inside onProviderDisabled");
}
public void onProviderEnabled(String provider) {
// required for interface, not used
Log.e(TAG, "**********inside onProviderEnabled");
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// required for interface, not used
Log.e(TAG, "**********inside onStatusChanged");
}
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
Log.e(TAG, "**********inside isRouteDisplayed");
return false;
}
/* User can zoom in/out using keys provided on keypad */
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_I) {
gMapView.getController().setZoom(gMapView.getZoomLevel() + 1);
return true;
} else if (keyCode == KeyEvent.KEYCODE_O) {
gMapView.getController().setZoom(gMapView.getZoomLevel() - 1);
return true;
} else if (keyCode == KeyEvent.KEYCODE_S) {
gMapView.setSatellite(true);
return true;
} else if (keyCode == KeyEvent.KEYCODE_T) {
gMapView.setTraffic(true);
return true;
}
return false;
}
/* Class overload draw method which actually plot a marker,text etc. on Map */
protected class MyLocationOverlay extends com.google.android.maps.Overlay {
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
Paint paint = new Paint();
Log.e(TAG, "**********inside onDraw");
// Converts lat/lng-Point to OUR coordinates on the screen.
Point myScreenCoords = new Point();
mapView.getProjection().toPixels(p, myScreenCoords);
paint.setStrokeWidth(1);
paint.setARGB(255, 255, 255, 255);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
canvas.drawCircle(myScreenCoords.x, myScreenCoords.y, 20, paint);
canvas.drawText("I am here...", myScreenCoords.x, myScreenCoords.y, paint);
return true;
}
}
}
。
01-19 16:13:59.698: D/ddm-heap(2294): Got feature list request
01-19 16:14:00.893: E/WcFinderActivity(2294): **********inside oncreate
01-19 16:14:01.073: E/WcFinderActivity(2294): **********about to call getSystemService
01-19 16:14:01.083: D/LocationManager(2294): Constructor: service = [email protected]
01-19 16:14:01.083: E/WcFinderActivity(2294): **********about to call requestLocationUpdates
01-19 16:14:01.398: I/MapActivity(2294): Handling network change notification:CONNECTED
01-19 16:14:01.398: E/MapActivity(2294): Couldn't get connection factory client
01-19 16:14:01.438: E/WcFinderActivity(2294): **********inside isRouteDisplayed
01-19 16:14:01.613: D/dalvikvm(2294): GC freed 3423 objects/218896 bytes in 81ms
01-19 16:14:02.003: D/dalvikvm(2294): GC freed 6408 objects/380712 bytes in 87ms
01-19 16:14:02.283: E/WcFinderActivity(2294): **********inside onDraw
01-19 16:14:02.378: D/dalvikvm(2294): GC freed 10136 objects/744376 bytes in 77ms
01-19 16:14:02.383: E/WcFinderActivity(2294): **********inside onDraw
01-19 16:14:02.423: E/WcFinderActivity(2294): **********inside onLocationChanged
01-19 16:14:02.448: E/WcFinderActivity(2294): **********inside onLocationChanged
01-19 16:14:02.493: E/WcFinderActivity(2294): **********inside isRouteDisplayed
01-19 16:14:02.523: E/WcFinderActivity(2294): **********inside onDraw
01-19 16:14:02.528: E/WcFinderActivity(2294): **********inside onDraw
01-19 16:14:02.578: E/WcFinderActivity(2294): **********inside isRouteDisplayed
01-19 16:14:02.603: E/WcFinderActivity(2294): **********inside onDraw
嗨,是的,我想我做了所有。我遵循以下教程。 http://www.androidcompetencycenter.com/?s=GPS – turtleboy
哎呀,我以爲我做了,但不正確。感謝它現在的作品 – turtleboy
沒問題,這樣的事情發生..:D – Cata