2010-09-23 2 views
3

Я использую следующее, чтобы высмеять мое местоположение в Android.mock location in android

public class GPSwork extends Activity implements LocationListener{ 
LocationManager locationManager; 
String mocLocationProvider; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    mocLocationProvider = LocationManager.GPS_PROVIDER; 
    setLocation(28.574853,78.063201); 
} 

public void setLocation(double latitude, double longitude) { 
    locationManager.addTestProvider(mocLocationProvider, false, true, false, false, false, false, false, 0, 5); 
    locationManager.setTestProviderEnabled(mocLocationProvider, true); 
    locationManager.requestLocationUpdates(mocLocationProvider, 0, 0, this); 
    Location loc = new Location(mocLocationProvider); 
    loc.setTime(System.currentTimeMillis()); 
    loc.setLatitude(latitude); 
    loc.setLongitude(longitude); 
    locationManager.setTestProviderLocation(mocLocationProvider, loc); 
} 

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

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

} 

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

public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub  
} 
} 

Но это не работает. Я хочу увидеть его в реальном устройстве и пузырь, мигающий в этом месте, но я ничего не получил. Пожалуйста, исправьте мой код и помогите мне. Я использовал разрешения.

Я хочу создать приложение similatiom для определения местоположения. Обычно, когда мы открываем карты Google, оно отображает наше текущее местоположение с голубым морганием в нашем местоположении. Аналогично, если я изменил координаты, то есть широту и широту, он должен показать, что я в этом месте с синим мерцанием,

! [альтернативный текст] [1] это экран короткий ..

Мой XML штраф

<?xml version="1.0" encoding="utf-8"?> 

<com.google.android.maps.MapView 
    android:id="@+id/mapView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:apiKey="0Sy8vgJlQkFxcisUAkrxu3xN33dqFgBetCg4jxg" 
    /> 

ответ

2

Это основной шаблон для приложения, которое использует Google Maps:

public class MapsActivity extends MapActivity 
{  

    MapView mapView; 
MapController mc; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     mapView = (MapView)findViewById(R.id.mapView); 
     //zoom controlls 
     mc = mapView.getController(); 
     mc.setZoom(12); 
     setContentView(R.layout.main); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 
} 

В вашем AndroidManifest.xml файле добавить:

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

и:

<uses-permission android:name="android.permission.INTERNET" /> 

Для отображения вашего конкретного местоположения добавьте к этому OnCreate метод:

String coordinates[] = {"1.352566007", "103.78921587"}; 
double lat = Double.parseDouble(coordinates[0]); 
double lng = Double.parseDouble(coordinates[1]); 

p = new GeoPoint(
     (int) (lat * 1E6), 
     (int) (lng * 1E6)); 

mc.animateTo(p); 
mc.setZoom(17); 
mapView.invalidate(); 

Наконец, вам нужно установить маркер использования карты наложения. Добавьте следующий класс в класс MapsActivity:

class MapOverlay extends com.google.android.maps.Overlay 
    { 
     @Override 
     public boolean draw(Canvas canvas, MapView mapView, 
     boolean shadow, long when) 
     { 
      super.draw(canvas, mapView, shadow);     

      //---translate the GeoPoint to screen pixels--- 
      Point screenPts = new Point(); 
      mapView.getProjection().toPixels(p, screenPts); 

      //---add the marker--- 
      Bitmap bmp = BitmapFactory.decodeResource(
       getResources(), R.drawable.my_bubble);    
      canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);   
      return true; 
     } 
    } 

В этом методе дро вы можете в какой-то маркер анимации, если вы хотите. Теперь вы должны добавить наложение на свою карту:

//---Add a location marker--- 
MapOverlay mapOverlay = new MapOverlay(); 
List<Overlay> listOfOverlays = mapView.getOverlays(); 
listOfOverlays.clear(); 
listOfOverlays.add(mapOverlay);   

mapView.invalidate(); 

Это краткий обзор. Вам понадобится ключ google goi для работы с Google Maps api.Подробное руководство по google maps api можно найти здесь, Using Google Maps in Android

0

Вот как справиться с GPS в андроиде. Это плохое решение, чтобы ваша основная деятельность прослушивала обновления местоположения. Использование и изменить следующий класс:

public MyGPS implements LocationListener{ 

    public LocationManager lm = null; 
    private MainActivity SystemService = null; 
    //lat, lng 
    private double mLongitude = 0; 
    private double mLatitude = 0; 

    public MyGPS(MainActivity sservice){ 
     this.SystemService = sservice; 
     this.startLocationService(); 
    } 

    public void startLocationService(){ 
     this.lm = (LocationManager) this.SystemService.getSystemService(Context.LOCATION_SERVICE); 
     this.lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 5, this); 
    } 

    public void onLocationChanged(Location location) { 
     location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     try { 
      this.mLongitude = location.getLongitude(); 
      this.mLatitude = location.getLatitude(); 
     } catch (NullPointerException e) { 
      Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null); 
     } 
    } 
} 

В вашем OnCreate метод сделать экземпляр этого класса и locationlistener начнет слушать обновления GPS. Но вы не можете получить доступ к lng и lat, так как вы не знаете из своей активности, поскольку они установлены или нулевые. Так что вам нужен обработчик, который отправляет сообщение с вашей основной деятельностью:

Modify следующим способом:

public void onLocationChanged(Location location) { 
     location = this.lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     try { 
      this.mLongitude = location.getLongitude(); 
      this.mLatitude = location.getLatitude(); 
      Message msg = Message.obtain(); 
      msg.what = UPDATE_LOCATION; 
      this.SystemService.myViewUpdateHandler.sendMessage(msg); 
     } catch (NullPointerException e) { 
      Log.i("Null pointer exception " + mLongitude + "," + mLatitude, null); 
     } 
    } 

В вашей основной деятельности добавить следующее:

Handler myViewUpdateHandler = new Handler(){ 

     public void handleMessage(Message msg) { 
       switch (msg.what) { 
       case UPDATE_LOCATION: 
       //access lat and lng 
     })); 
       } 

       super.handleMessage(msg); 
     } 
}; 
+0

привет спасибо за ур ответ ... Я не хочу, чтобы текущее местоположение. Я хочу установить долготу и широту, чтобы получить желаемое местоположение ... с синим мигающим пузырем. Любая помощь – user455422

+0

, тогда вам не нужен приемник местоположений вообще , только некоторые фиктивные данные. вы хотите установить местоположение на карте? –

+0

да, я хочу установить местоположение на карте, и на этом месте должно появиться синее мигание ... Как я могу сделать это ArtWork ..? Пожалуйста, помогите мне .. В отличие от местоположения Spoofer .. – user455422

0

Я думаю, вам нужно расширить класс MyLocationOverlay и переопределить onDraw и изменить местоположение в нужное место, а затем вызвать метод superclass.onDraw.

Смежные вопросы