0

私がいる場所を地図上に表示しようとしています。私はイスラエルにいて、エジプトにいることを示しています。さまざまな投稿のすべての提案を実装しようとしましたが、問題の解決には役立ちませんでした。

  • GPSをオンにしました。
  • インターネットに接続しています。
  • MAPS のデフォルトの Android アプリを起動すると、実際の場所が表示されます。

マニフェスト許可:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

uses-library android:name="com.google.android.maps" も使用します。

これは、LocationListener を拡張する MapActivity からの関連コードです。

        lm = (LocationManager) getSystemService(LOCATION_SERVICE);
    boolean enabled = lm
      .isProviderEnabled(LocationManager.GPS_PROVIDER);

    // Check if enabled and if not send user to the GSP settings
    // Better solution would be to display a dialog and suggesting to 
    // go to the settings
    if (!enabled) {
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
      startActivity(intent);
    } 


    if(came_from.matches("FollowLocation"))
    {
        Location location;
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        String providerName = lm.getBestProvider(criteria, true);
        // If no suitable provider is found, null is returned.
        if (providerName == null) 
        {
            // reflecting changes if distance travel by
            // user is greater than 20m from current location
            // and every 1 minute
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
            location=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        }
        else
        {
            // reflecting changes if distance travel by
            // user is greater than 20m from current location
            // and every 1 minute
            lm.requestLocationUpdates(providerName, 1*60*1000, 20, this);
            location=lm.getLastKnownLocation(providerName);
        }       


        gMapView = (MapView) findViewById(R.id.myGMap);
        gMapView.setStreetView(true);
        mc = gMapView.getController();
        if (location != null)   
        {
            lat = location.getLatitude();
            lng = location.getLongitude();
            mc.setZoom(14);
        }
        else    //in case we didn't get the location yet
        {
            lat = 32.08;
            lng = 35.84;
            mc.setZoom(9);
        }

        p = new GeoPoint((int) lat * 1000000, (int) lng * 1000000);
        mc.animateTo(p);

        // Adding zoom controls to Map
        gMapView.setBuiltInZoomControls(true);

        // Add a location mark
        MyLocationOverlay myLocationOverlay = new MyLocationOverlay();
        List<Overlay> list = gMapView.getOverlays();
        list.add(myLocationOverlay);



    }

}

/* This method is called when use position will get changed */
public void onLocationChanged(Location location) {
    if (location != null) {
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        p = new GeoPoint((int) lat * 1000000, (int) lng * 1000000);
        mc.animateTo(p);
    }
}




public void onProviderDisabled(String provider) {
    // required for interface, not used
}

public void onProviderEnabled(String provider) {
    // required for interface, not used
}

public void onStatusChanged(String provider, int status, Bundle extras) {
    // required for interface, not used
}

protected boolean isRouteDisplayed() {
    return false;
}

これらの座標: lat = 32.08 lng = 35.84 は、イスラエルのいくつかのスポットです. または、私は何をしていないのですか?:P

ありがとう!

4

2 に答える 2

0

getLastKnownLocation が何らかの理由でその誤った位置を示していると思います。場所がnullになることはないため、デフォルトの32.08、35.84に到達することはありません。デバッガーを使用して、getLastKnownLocation への呼び出しのどれがヒットしているか、および返される値を確認することをお勧めします。

于 2012-09-22T18:35:52.603 に答える
0

私は自分のコードを取り、それをインターネットの例からの実際のコードと比較しました。何が問題を解決したのかはわかりませんが、他のすべての構成を完了した後に LocationUpdates を要求する必要があることは明確にわかっています。

この問題に遭遇した他の人 - インターネットから動作するコードを取得し、アプリで動作するまで段階的に比較してみてください。

于 2012-09-23T11:41:07.690 に答える