2

Location は、このコードから常に null を返します。私のコードをチェックして、何が悪いのか教えてください。デバッグ モードでプロジェクトを実行すると、provider="network" ですが、場所は常に null です。DDMS を使用して緯度と経度の値を送信しましたが、変化しません。何が問題なのかわからない

onCreate メソッドのこの部分

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        provider = lm.getBestProvider(criteria, true);
        location = lm.getLastKnownLocation(provider);

            updateLocation(location);

onResume メソッドのこの部分

@Override   
    protected void onResume() {  
        super.onResume();
        lm.requestLocationUpdates(provider, 5000, 10, this);
    }

私は LocationListener を使用しています (MapActivity は LocationListener を実装しています)。これは onLocationChanged 部分です

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

最後に、これは私の updateLocation() です

private void updateLocation(Location location){
        if (location != null) {
            Double lat = location.getLatitude()*1E6;
            Double lng = location.getLongitude()*1E6;
            point = new GeoPoint(lat.intValue(), lng.intValue());

            mapView = (MapView) findViewById(R.id.mapView);
            mc = mapView.getController();
            mapView.setBuiltInZoomControls(true);

            //List<Overlay> overlays = mapView.getOverlays();
            myLocOverlay = new MyLocationOverlay(this, mapView);
            //overlays.add(myLocOverlay);
            mapView.getOverlays().add(myLocOverlay);
            myLocOverlay.enableMyLocation();

            myLocOverlay.runOnFirstFix(new Runnable() {
                public void run() {
                    mc.animateTo(myLocOverlay.getMyLocation());
                    }
            }); 

            mc.setZoom(15);
            mapView.invalidate();

            }

    }

必須の権限を付与し、Google マップ ライブラリを使用しています

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

<uses-library
            android:name="com.google.android.maps"
            android:required="true" >
        </uses-library>
4

1 に答える 1

1

LocationManager.GPS_PROVIDER を使用してリクエストする必要があると思います。私のコードをテストできます:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1l,1f, new LocationListener() {        
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
         // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

    }

    @Override
    public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
        updateLocation(location);               
    }
    });

幸運を!^-^

于 2012-08-01T09:23:25.183 に答える