0

我试图在用户移动时绘制一条红色折线。这是我的以下代码:

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.LocationSource;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.PolylineOptions;

import android.graphics.Color;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.FragmentManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements LocationSource, LocationListener {
final int RQS_GooglePlayServices = 1;
private GoogleMap myMap;
TextView tvLocInfo;

LocationManager myLocationManager = null;
OnLocationChangedListener myLocationListener = null;
Criteria myCriteria;
Location lastLocationloc;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tvLocInfo = (TextView)findViewById(R.id.locinfo);

    FragmentManager myFragmentManager = getFragmentManager();
    MapFragment myMapFragment 
        = (MapFragment)myFragmentManager.findFragmentById(R.id.map);
    myMap = myMapFragment.getMap();

    myMap.setMyLocationEnabled(true);

    myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

    myCriteria = new Criteria();
    myCriteria.setAccuracy(Criteria.ACCURACY_FINE);
    myLocationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_legalnotices:
        String LicenseInfo = GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo(
                getApplicationContext());
        AlertDialog.Builder LicenseDialog = new AlertDialog.Builder(MainActivity.this);
        LicenseDialog.setTitle("Legal Notices");
        LicenseDialog.setMessage(LicenseInfo);
        LicenseDialog.show();
        return true;    
    }
    return super.onOptionsItemSelected(item);   
}

@Override
protected void onResume() {
    super.onResume();

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());

    if (resultCode == ConnectionResult.SUCCESS){
        Toast.makeText(getApplicationContext(), 
                "isGooglePlayServicesAvailable SUCCESS", 
                Toast.LENGTH_LONG).show();

        //Register for location updates using a Criteria, and a callback on the specified looper thread.
        myLocationManager.requestLocationUpdates(
                0L,             //minTime
                0.0f,           //minDistance
                myCriteria,     //criteria
                this,           //listener
                null);          //looper

        //Replaces the location source of the my-location layer.
        myMap.setLocationSource(this);

    }else{
        GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices);    
    }

}

@Override
protected void onPause() {
    myMap.setLocationSource(null);
    myLocationManager.removeUpdates(this);

    super.onPause();
}

@Override
public void activate(OnLocationChangedListener listener) {
    myLocationListener = listener;
}

@Override
public void deactivate() {
    myLocationListener = null;
}

/*@Override
public void onLocationChanged(Location location) {
    if (myLocationListener != null) {
        myLocationListener.onLocationChanged(location);

        double lat = location.getLatitude();
        double lon = location.getLongitude();

        tvLocInfo.setText(
                "lat: " + lat + "\n" +
                "lon: " + lon);
    }
}*/

@Override
public void onLocationChanged(Location location) {
     if (lastLocationloc == null) { 
         lastLocationloc = location;
     }
     LatLng lastLatLng = locationToLatLng(lastLocationloc);
     LatLng thisLatLng = locationToLatLng(location);
     //Log.e(TAG, "Last LatLng is :"+lastLatLng);
     //Log.e(TAG, "Last LatLng is :"+thisLatLng);
     myMap.addPolyline(new PolylineOptions().add(lastLatLng).add(thisLatLng).width(3).color(Color.RED));
     lastLocationloc = location;
 }

 public static LatLng locationToLatLng(Location loc) { 
     if (loc != null) 
         return new LatLng(loc.getLatitude(), loc.getLongitude());
     return null;
 }

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

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

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub
}
}

当我在实际设备上运行应用程序时,什么也没有发生。不会出现折线。我究竟做错了什么?

4

0 回答 0