2012-02-08 16 views
2

GPSを使って現在位置を取得できません。 は、私はサムスンギャラクシーミニその後、アプリのクラッシュにテストだよ:(は、私はその後、animateTo geopointをしないマップエミュレータのテストだ、私はマニフェストに許可を追加した

コード:

public class atm_atmogan extends MapActivity { 

private LocationManager myLocationManager; 
private LocationListener myLocationListener; 
private MapView myMapView; 
private MapController myMapController; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.atm_atmogan); 
    myMapView = (MapView)findViewById(R.id.map_view); 
    myMapView.setTraffic(true); 
    myMapController = myMapView.getController(); 

    myLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    myLocationListener = new MyLocationListener(); 
    myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,myLocationListener); 

    //Get the current location in start-up 
    double lat = myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude(); 
    double lot = myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude(); 
    GeoPoint initGeoPoint = new GeoPoint((int)(lat*1E6),(int)(lot*1E6)); 
    myMapController.animateTo(initGeoPoint); 
    myMapController.setZoom(18); 
} 

private class MyLocationListener implements LocationListener{ 
    public void onLocationChanged(Location loc) { 
     GeoPoint myGeoPoint = new GeoPoint((int)(loc.getLatitude()*1E6),(int)(loc.getLongitude()*1E6)); 
     myMapController.animateTo(myGeoPoint); 
     myMapController.setZoom(18); 
    } 

    public void onProviderDisabled(String provider) { 
     } 

    public void onProviderEnabled(String provider) { 
     } 

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

@Override 
protected void onPause() { 
    super.onPause(); 
    myLocationManager.removeUpdates(myLocationListener); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,myLocationListener); 
} 

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

Logcat:

02-08 14:31:15.481: D/dalvikvm(2292): GC freed 727 objects/60152 bytes in 148ms 
02-08 14:31:17.012: D/dalvikvm(2292): GC freed 143 objects/7752 bytes in 68ms 
02-08 14:39:10.801: W/KeyCharacterMap(2292): No keyboard for id 0 
02-08 14:39:10.801: W/KeyCharacterMap(2292): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
02-08 14:39:17.081: E/ActivityThread(2292): Failed to find provider info for com.google.settings 
02-08 14:39:17.091: E/ActivityThread(2292): Failed to find provider info for com.google.settings 
02-08 14:39:17.112: E/ActivityThread(2292): Failed to find provider info for com.google.settings 
02-08 14:39:17.372: D/LocationManager(2292): Constructor: service = [email protected] 
02-08 14:39:17.683: I/MapActivity(2292): Handling network change notification:CONNECTED 
02-08 14:39:17.683: E/MapActivity(2292): Couldn't get connection factory client 
02-08 14:39:20.012: D/dalvikvm(2292): GC freed 5768 objects/476800 bytes in 87ms 
02-08 14:39:20.731: W/KeyCharacterMap(2292): No keyboard for id 0 
02-08 14:39:20.731: W/KeyCharacterMap(2292): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
02-08 14:39:20.791: D/LocationManager(2292): removeUpdates: listener = [email protected] 
02-08 14:39:21.172: D/dalvikvm(2292): threadid=23 wakeup: interrupted 
+0

をお試しください!ヘルプ – HoangQBH

+0

エラースタックトレースはありません。あなたが見つけることができる最後のstacktraceのためにLogCatを検索してください... – WarrenFaith

+0

Uあなたのマニフェストに文字列ACCESS_FINE_LOCATIONとACCESS_WIFI_STATEを追加しましたか? –

答えて

3

は、私は、Android Maps APIキーを追加したこの

public class MyMapClass extends MapActivity { 
MapController mapController; 
MyPositionOverlay positionOverlay; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    MapView myMapView=(MapView)findViewById(R.id.myMapView); 
    myMapView.setSatellite(true); 
    myMapView.setBuiltInZoomControls(true); 
    mapController=myMapView.getController(); 
    mapController.setZoom(17); 
    positionOverlay = new MyPositionOverlay(); 
    List<Overlay> overlays = myMapView.getOverlays(); 
    overlays.add(positionOverlay); 

     LocationManager locationManager; 
     String context=Context.LOCATION_SERVICE; 
     locationManager=(LocationManager)getSystemService(context); 

     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     criteria.setAltitudeRequired(false); 
     criteria.setBearingRequired(false); 
     criteria.setCostAllowed(true); 
     criteria.setPowerRequirement(Criteria.POWER_LOW); 
     String provider = locationManager.getBestProvider(criteria, true); 
     Location location = locationManager.getLastKnownLocation(provider); 

     final LocationListener locationListener = new LocationListener() { 
      public void onLocationChanged(Location location) { 
      updateWithNewLocation(location); 
      } 
      public void onProviderDisabled(String provider){ 
      updateWithNewLocation(null); 
      } 
      public void onProviderEnabled(String provider){ } 
      public void onStatusChanged(String provider, int status, 
      Bundle extras){ } 
      }; 

     updateWithNewLocation(location); 
     locationManager.requestLocationUpdates(provider, 2000, 10, 
       locationListener); 
} 
private void updateWithNewLocation(Location location) { 
    if(location!=null) { 
     // Update the map location. 
     positionOverlay.setLocation(location); 
     Double geoLat = location.getLatitude()*1E6; 
     Double geoLng = location.getLongitude()*1E6; 
     GeoPoint point = new GeoPoint(geoLat.intValue(), 
     geoLng.intValue()); 
     mapController.animateTo(point); 

    } 
} 
@Override 
protected boolean isRouteDisplayed() { 

    return true; 
} 

MyPositionOverlayクラス

public class MyPositionOverlay extends Overlay { 
Location location; 
private final int mRadius = 5; 
@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    Projection projection = mapView.getProjection(); 
    if (shadow == false) { 
    // Get the current location 
    Double latitude = location.getLatitude()*1E6; 
    Double longitude = location.getLongitude()*1E6; 
    GeoPoint geoPoint; 
    geoPoint = new GeoPoint(latitude.intValue(),longitude.intValue()); 
    // Convert the location to screen pixels 
    Point point = new Point(); 
    projection.toPixels(geoPoint, point); 
    RectF oval = new RectF(point.x - mRadius, point.y - mRadius, 
    point.x + mRadius, point.y + mRadius); 
    // Setup the paint 
    Paint paint = new Paint(); 
    paint.setARGB(250, 255, 0, 0); 
    paint.setAntiAlias(true); 
    paint.setFakeBoldText(true); 
    Paint backPaint = new Paint(); 
    backPaint.setARGB(175, 50, 50, 50); 
    backPaint.setAntiAlias(true); 
    RectF backRect = new RectF(point.x + 2 + mRadius, 
    point.y - 3*mRadius, 
    point.x + 65, point.y + mRadius); 
    // Draw the marker 
    canvas.drawOval(oval, paint); 
    canvas.drawRoundRect(backRect, 5, 5, backPaint); 
    canvas.drawText("Here I Am", point.x + 2*mRadius, point.y, paint); 
    } 
    super.draw(canvas, mapView, shadow); 
} 
@Override 
public boolean onTap(GeoPoint point, MapView mapView) { 
return false; 
} 
public Location getLocation() { 
    return location; 
    } 
    public void setLocation(Location location) { 
    this.location = location; 
    } 

}

+0

このコードはActivity、MapActivityを使用していますか?..私はいくつかの問題を抱えています。 e。助けてくれてありがとう:D – HoangQBH

+0

答えを調べてください。 – Sunny

+0

テストあなたのコード:( – HoangQBH

0

これを試してみてください:

public class LocationDemo extends Activity implements LocationListener { 
    private static final String TAG = "LocationDemo"; 
    private static final String[] S = { "Out of Service", "Temporarily Unavailable", "Available" }; 

    private TextView output; 
    private LocationManager locationManager; 
    private String bestProvider; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Get the output UI 
     output = (TextView) findViewById(R.id.output); 

     // Get the location manager 
     locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

     // List all providers: 
     List<String> providers = locationManager.getAllProviders(); 
     for (String provider : providers) { 
      printProvider(provider); 
     } 

     Criteria criteria = new Criteria(); 
     bestProvider = locationManager.getBestProvider(criteria, false); 
     output.append("\n\nBEST Provider:\n"); 
     printProvider(bestProvider); 

     output.append("\n\nLocations (starting with last known):"); 
     Location location = locationManager.getLastKnownLocation(bestProvider); 
     printLocation(location); 
    } 

    /** Register for the updates when Activity is in foreground */ 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(bestProvider, 20000, 1, this); 
    } 

    /** Stop the updates when Activity is paused */ 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(this); 
    } 

    public void onLocationChanged(Location location) { 
     printLocation(location); 
    } 

    public void onProviderDisabled(String provider) { 
     // let okProvider be bestProvider 
     // re-register for updates 
     output.append("\n\nProvider Disabled: " + provider); 
    } 

    public void onProviderEnabled(String provider) { 
     // is provider better than bestProvider? 
     // is yes, bestProvider = provider 
     output.append("\n\nProvider Enabled: " + provider); 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
     output.append("\n\nProvider Status Changed: " + provider + ", Status=" 
       + S[status] + ", Extras=" + extras); 
    } 

    private void printProvider(String provider) { 
     LocationProvider info = locationManager.getProvider(provider); 
     output.append(info.toString() + "\n\n"); 
    } 

    private void printLocation(Location location) { 
     if (location == null) 
      output.append("\nLocation[unknown]\n\n"); 
     else 
      output.append("\n\n" + location.toString()); 
    } 
} 

に追加してください。マニフェストファイル

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
+0

私は理解しませんこのコードは、あなたの携帯電話の最後の既知の場所を与えるだろう、なぜ私はそれをしなければならないのですか?私はあなたがこのコード – HoangQBH

+0

を使用 、今必ずしも実際の場所になりますではない。 –

+0

で簡単に現在のGPS位置を取得することができますmapactivity .. – Fustigador

関連する問題