2010-09-23 126 views
3

我正在使用以下內容來模擬我在Android中的位置。在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到位置spoofer.Actually當我們打開谷歌地圖,它會顯示我們目前的位置,藍色在我們location..similarly閃爍,如果我改變了座標即緯度和緯度它表明,我在藍色閃爍該位置,

![替代文本] [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

這是一個基本的模式對於使用谷歌地圖的應用程序:

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(); 

這是一個快速概述。您將需要一個谷歌API鍵與谷歌地圖API工作。詳細的谷歌地圖API教程可以在這裏找到,Using Google Maps in Android

0

這裏是如何處理在android系統的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,因爲你不知道你的活動是否被設置或爲空。因此,你需要將消息發送到您的主要活動的處理程序:

修改下面的方法:

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

嗨,感謝您的回覆...我不想要當前的位置..我想設置經度和緯度,以獲得所需的位置...與藍色閃爍bubble.Any幫助 – user455422 2010-09-23 07:19:41

+0

那麼你根本不需要位置監聽器,只是一些虛擬數據。你想在地圖上設置位置嗎? – 2010-09-23 07:36:52

+0

是的,我想設置地圖上的位置,並在該位置藍色閃爍應該出現...我怎麼能做到這個藝術工作..?請幫助我..類似於位置欺騙.. – user455422 2010-09-23 07:51:29

0

我認爲你必須擴展MyLocationOverlay類,並覆蓋onDraw並將位置更改爲所需的位置,然後調用superclass.onDraw方法。