2012-02-08 6 views
2

명시된 권한을 추가 했으므로 에뮬레이터에서 테스트 한 다음지도가 아닌 animateTo geopoint로 테스트합니다. 나는 삼성 은하 미니 후 응용 프로그램 충돌 :(에서 테스트 해요GPS를 사용하여 현재 위치를 가져올 수 없습니다.

코드 :.

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; 
}; 
} 

로그 캣 :

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

내가 안드로이드지도 API 키를 추가했다! 도움말 – HoangQBH

+0

오류 stacktrace가 없습니다. LogCat에서 찾을 수있는 마지막 스택 추적을 찾으십시오 ... – WarrenFaith

+0

U 귀하의 목록에 문자열 ACCESS_FINE_LOCATION 및 ACCESS_WIFI_STATE을 (를) 추가 했습니까? –

답변

3

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를 사용합니까 ?? .. 몇 가지 문제가 있습니다 .. 당신이 나에게 대구를 줄 수 없습니까? 이자형. 도움을 주셔서 감사합니다 : 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

이해가 안됩니다. 나는 mapactivity를 사용합니다 .. – HoangQBH

+0

이 코드로 현재 GPS 위치를 쉽게 얻을 수 있습니다 –

+0

그 코드는 현재 실제 위치가 아닐 정도로 휴대 전화의 마지막 위치를 알려줍니다 – Fustigador

관련 문제