使用GPS无法获取当前位置 [英] Can't get current location using gps

查看:157
本文介绍了使用GPS无法获取当前位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我又增加了权限来体现,我在模拟器测试然后映射不animateTo的GeoPoint。
我在三星Galaxy迷你然后测试应用程序崩溃:(

code:

 公共类atm_atmogan扩展MapActivity {私人的LocationManager myLocationManager;
私人LocationListener的myLocationListener;
私人MapView类myMapView;
私人MapController myMapController;@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.atm_atmogan);
    myMapView =(图形页面)findViewById(R.id.map_view);
    myMapView.setTraffic(真);
    myMapController = myMapView.getController();    myLocationManager =(的LocationManager)getSystemService(Context.LOCATION_SERVICE);
    myLocationListener =新MyLocationListener();
    myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,myLocationListener);    //获取在启动时的当前位置
    双纬度= myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude();
    双重很多= myLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude();
    GeoPoint的initGeoPoint =新的GeoPoint((INT)(LAT * 1E6),(INT)(很多* 1E6));
    myMapController.animateTo(initGeoPoint);
    myMapController.setZoom(18);
}私有类MyLocationListener实现LocationListener的{
    公共无效onLocationChanged(位置LOC){
        GeoPoint的myGeoPoint =新的GeoPoint((INT)(loc.getLatitude()* 1E6),(INT)(loc.getLongitude()* 1E6));
        myMapController.animateTo(myGeoPoint);
        myMapController.setZoom(18);
    }    公共无效onProviderDisabled(字符串提供商){
        }    公共无效onProviderEnabled(字符串提供商){
        }    公共无效onStatusChanged(字符串提供商,INT地位,捆绑演员){
        }
}@覆盖
保护无效的onPause(){
    super.onPause();
    myLocationManager.removeUpdates(myLocationListener);
}@覆盖
保护无效onResume(){
    super.onResume();
    myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,myLocationListener);
}@覆盖
保护布尔isRouteDisplayed(){
    返回false;
};
}

logcat的:

  02-08 14:31:15.481:D / dalvikvm(2292):GC释放在148ms 727对象/ 60152字节
02-08 14:31:17.012:D / dalvikvm(2292):GC释放143对象/在68ms 7752个字节
02-08 14:39:10.801:W / KeyCharacterMap(2292):无键盘ID 0
02-08 14:39:10.801:W / KeyCharacterMap(2292):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
02-08 14:39:17.081:E / ActivityThread(2292):无法找到com.google.settings供应商信息
02-08 14:39:17.091:E / ActivityThread(2292):无法找到com.google.settings供应商信息
02-08 14:39:17.112:E / ActivityThread(2292):无法找到com.google.settings供应商信息
02-08 14:39:17.372:D /的LocationManager(2292):构造:服务= android.location.ILocationManager$Stub$Proxy@44ebe658
02-08 14:39:17.683:I / MapActivity(2292):处理网络更改通知:已连接
02-08 14:39:17.683:E / MapActivity(2292):无法获取连接工厂客户端
02-08 14:39:20.012:D / dalvikvm(2292):GC释放5768对象/在87ms 476800字节
02-08 14:39:20.731:W / KeyCharacterMap(2292):无键盘ID 0
02-08 14:39:20.731:W / KeyCharacterMap(2292):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
02-08 14:39:20.791:D /的LocationManager(2292):removeUpdates:监听= tim_atm.namespace.atm_atmogan$MyLocationListener@44ec2170
02-08 14:39:21.172:D / dalvikvm(2292):主题ID = 23唤醒:中断


解决方案

试试这个

 公共类MyMapClass扩展MapActivity {
MapController mapController;
MyPositionOverlay positionOverlay;/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    MapView的myMapView =(图形页面)findViewById(R.id.myMapView);
    myMapView.setSatellite(真);
    myMapView.setBuiltInZoomControls(真);
    mapController = myMapView.getController();
    mapController.setZoom(17);
    positionOverlay =新MyPositionOverlay();
    清单<&叠加GT;覆盖= myMapView.getOverlays();
    overlays.add(positionOverlay);         的LocationManager的LocationManager;
        字符串语境= Context.LOCATION_SERVICE;
        的LocationManager =(的LocationManager)getSystemService(背景);        标准标准=新标准();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(假);
        criteria.setBearingRequired(假);
        criteria.setCostAllowed(真);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        字符串提供商= locationManager.getBestProvider(标准,真正的);
        地点= locationManager.getLastKnownLocation(供应商);        最后LocationListener的LocationListener的=新LocationListener的(){
            公共无效onLocationChanged(地点){
            updateWithNewLocation(位置);
            }
            公共无效onProviderDisabled(字符串提供商){
            updateWithNewLocation(NULL);
            }
            公共无效onProviderEnabled(字符串提供商){}
            公共无效onStatusChanged(字符串提供商,INT状态,
            捆绑演员){}
            };        updateWithNewLocation(位置);
        locationManager.requestLocationUpdates(供应商,2000年,10,
                LocationListener的);
}
私人无效updateWithNewLocation(地点){
    如果(位置!= NULL){
        //更新地图上的位置。
        positionOverlay.setLocation(位置);
        双geoLat = location.getLatitude()* 1E6;
        双geoLng = location.getLongitude()* 1E6;
        的GeoPoint点=新的GeoPoint(geoLat.intValue()
        geoLng.intValue());
        mapController.animateTo(点);    }
}
@覆盖
保护布尔isRouteDisplayed(){    返回true;
}

MyPositionOverlay类

 公共类MyPositionOverlay扩展覆盖{
地点位置;
私人最终诠释mRadius = 5;
@覆盖
公共无效画(油画画布,MapView类MapView类,布尔阴影){
  投影投影= MapView.getProjection()在;
  如果(阴影== FALSE){
  //获取当前位置
  双纬度= location.getLatitude()* 1E6;
  双经度= location.getLongitude()* 1E6;
  GeoPoint对象的GeoPoint;
  的GeoPoint =新的GeoPoint(latitude.intValue(),longitude.intValue());
  //转换为屏幕像素位置
  逐点=新点();
  projection.toPixels(GeoPoint对象,点);
  RectF椭圆形=新RectF(point.x - mRadius,point.y - mRadius,
  point.x + mRadius,point.y + mRadius);
  //设置油漆
  涂料粉刷=新的油漆();
  paint.setARGB(250,255,0,0);
  paint.setAntiAlias​​(真);
  paint.setFakeBoldText(真);
  涂料backPaint =新的油漆();
  backPaint.setARGB(175,50,50,50);
  backPaint.setAntiAlias​​(真);
  RectF backRect =新RectF(point.x + 2 + mRadius,
  point.y - 3 * mRadius,
  point.x + 65,+ point.y mRadius);
  //绘制标志
  canvas.drawOval(椭圆形,油漆);
  canvas.drawRoundRect(backRect,5,5,backPaint);
  canvas.drawText(我在这里,point.x + 2 * mRadius,point.y,油漆);
  }
  super.draw(画布,MapView类,阴影);
}
@覆盖
公共布尔中的onTap(GeoPoint的点,MapView类MapView类){
返回false;
}
公共场所的getLocation(){
  返回的位置;
  }
  公共无效的setLocation(地点){
  this.location =位置;
  }

}

I had added permission to manifest, i'm test on emulator then map not animateTo geopoint. I'm test on samsung galaxy mini then app crash :(.

Code:

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 = android.location.ILocationManager$Stub$Proxy@44ebe658
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 = tim_atm.namespace.atm_atmogan$MyLocationListener@44ec2170
02-08 14:39:21.172: D/dalvikvm(2292): threadid=23 wakeup: interrupted

解决方案

Try this

 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 Class

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

}

这篇关于使用GPS无法获取当前位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆