2012-10-12 88 views
1

我試圖實現一個提供用戶位置的應用程序。我試了很多例子&沒有運氣。 最後我發現這個代碼發佈在stackoverflow(Current position on google maps)。 但我得到錯誤&我絕對沒有clue.please有人可以幫我。Android Google API錯誤代碼

這裏是代碼..

public class MainActivity extends Activity { 

public static final String TAG = "GoogleMapsActivity"; 
private MapView mapView; 
private LocationManager locationManager; 
Geocoder geocoder; 
Location location; 
LocationListener locationListener; 
CountDownTimer locationtimer; 
MapController mapController; 
MapOverlay mapOverlay = new MapOverlay(); 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_main); 
    //setContentView(R.layout.googlemap); 
    // initComponents(); 
    mapView=(MapView)findViewById(R.id.myGMap); 
    mapView.setBuiltInZoomControls(true); 
    mapView.setSatellite(true); 
    mapController = mapView.getController(); 
    mapController.setZoom(16); 
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    if (locationManager == null) { 
     Toast.makeText(MainActivity.this, 
       "Location Manager Not Available", Toast.LENGTH_SHORT) 
       .show(); 
     return; 
    } 
    location = locationManager 
      .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    if (location == null) 
     location = locationManager 
       .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
    if (location != null) { 
     double lat = location.getLatitude(); 
     double lng = location.getLongitude(); 
     Toast.makeText(MainActivity.this, 
       "Location Are" + lat + ":" + lng, Toast.LENGTH_SHORT) 
       .show(); 
     GeoPoint point = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)); 
     mapController.animateTo(point, new Message()); 
     mapOverlay.setPointToDraw(point); 
     List<Overlay> listOfOverlays = mapView.getOverlays(); 
     listOfOverlays.clear(); 
     listOfOverlays.add(mapOverlay); 
    } 
    locationListener = new LocationListener() { 
     public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
     } 

     public void onProviderEnabled(String arg0) { 
     } 

     public void onProviderDisabled(String arg0) { 
     } 

     public void onLocationChanged(Location l) { 
      location = l; 
      locationManager.removeUpdates(this); 
      if (l.getLatitude() == 0 || l.getLongitude() == 0) { 
      } else { 
       double lat = l.getLatitude(); 
       double lng = l.getLongitude(); 
       Toast.makeText(MainActivity.this, 
         "Location Are" + lat + ":" + lng, 
         Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 
    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
     locationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 1000, 10f, locationListener); 
    locationManager.requestLocationUpdates(
      LocationManager.NETWORK_PROVIDER, 1000, 10f, locationListener); 
    locationtimer = new CountDownTimer(30000, 5000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      if (location != null) 
       locationtimer.cancel(); 
     } 

     @Override 
     public void onFinish() { 
      if (location == null) { 
      } 
     } 
    }; 
    locationtimer.start(); 
} 

public MapView getMapView() { 
    return this.mapView; 
} 



/* private void initComponents() { 

    }*/ 

protected boolean isRouteDisplayed() { 
    return false; 
} 

class MapOverlay extends Overlay { 
    private GeoPoint pointToDraw; 

    public void setPointToDraw(GeoPoint point) { 
     pointToDraw = point; 
    } 

    public GeoPoint getPointToDraw() { 
     return pointToDraw; 
    } 

    @Override 
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, 
      long when) { 
     super.draw(canvas, mapView, shadow); 

     Point screenPts = new Point(); 
     mapView.getProjection().toPixels(pointToDraw, screenPts); 

     Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
       R.drawable.ic_action_search); 
     canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null); 
     return true; 
    } 
} 




} 

這裏是我的logcat消息 ''」

10-12 08:08:15.931: E/AndroidRuntime(306): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.positioning4/com.example.positioning4.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class com.google.android.maps.MapView 

10-12 08:08:15.931: E/AndroidRuntime(306): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class com.google.android.maps.MapView 

這裏是我的XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<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="0sLxxvkp8prR4adOMGAG9vsrukJSDiB93vRGN1g" 
    /> 

回答

0

添加<uses-library android:name="com.google.android.maps" />

AndroidManifest.xmlapplication標籤

UPDATE

只是延長MapActivity代替Activity

+0

是的,我已經添加它ZuzooVn'' – bynu022

+0

您的項目使用:Google API? –

+0

感謝您關注ZuzooVn,是的即時通訊使用Google Apis。 API Level8。 – bynu022

0

嘗試從MapActivity擴展您的MainActivity。

public class MainActivity extends MapActivity { 
}