Android模拟器,查找模拟用户位置坐标。 有问题

嘿伙计们,我在尝试查找用户的经度和位置时遇到了麻烦,因为我运行程序并为模拟位置设置了genet修复的telnet命令。 在模拟器运行时,我只为模拟器设置模拟坐标,使其无响应,并且我的程序在检测输入坐标时失败。

import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class LBSact extends Activity{ /** Called when the activity is first created. */ public double longitude; public double latitude; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); longitude = 0; latitude = 0; //Creating the listener and manager LocationManager LManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); LocationListener createListen = new LocationListener(){ @Override public void onLocationChanged(Location location) { //longitude = location.getLongitude(); //latitude = location.getLatitude(); String printout1 = "My current location is: " + "Latitude = " + location.getLatitude() + "Longitude = " + location.getLongitude(); Toast.makeText(getApplicationContext(),printout1,Toast.LENGTH_LONG).show(); } @Override public void onProviderDisabled(String provider) { Toast.makeText(getApplicationContext(), "GPS disabled", Toast.LENGTH_LONG).show(); } @Override public void onProviderEnabled(String provider) { Toast.makeText(getApplicationContext(), "GPS enabled", Toast.LENGTH_LONG).show(); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }; //Cant use Network with emulator, can only use GPS mock locations //Toast.makeText(getApplicationContext(), "Does this work?", Toast.LENGTH_LONG).show(); LManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, createListen); } } 

首先。 我假设您已阅读以下内容: http : //developer.android.com/guide/topics/location/obtaining-user-location.html

因为你提到了注入模拟位置数据。 您还可以尝试其他一些操作,例如,您可以使用KML文件注入GPS位置: http : //developer.android.com/guide/developing/tools/ddms.html#emulator-control

但您应该做的主要是创建日志消息,以便您可以更准确地检测程序失败的位置。 这是一篇关于如何设置logcat的文章: http : //www.droidnova.com/debugging-in-android-using-eclipse,541.html

我建议这样做,因为将文本发送到屏幕可能并不总是有效,因为您的应用程序在进入这些调用之前可能会崩溃。

另外,您是否尝试过通过Eclipse调试应用程序? 它将在崩溃时中断,并为您提供应用程序失败的位置。

当你提供关于这个问题的更多细节时,我会更新这个答案,因为如果没有堆栈跟踪或记录跟踪,很难看到发生了什么。

有几件事:

  1. 您的AVD API级别是多少? 像这样的崩溃是2.3下的已知问题。

  2. 你是如何设置模拟坐标的? 通过Eclipse中的模拟器控件,还是通过Telnet?

  3. 我们来看一下清单中的权限。 在本地化的清单标记正常工作后,需要多个权限:

    uses-permission android:name =“android.permission.INTERNET”use-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“

以下是我如何请求用户位置的更新并为叠加项设置POI:

  package com.snackrocket.location; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.graphics.drawable.Drawable; import android.location.Geocoder; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.SimpleAdapter; import android.widget.TextView; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.MyLocationOverlay; import com.google.android.maps.Overlay; import com.google.android.maps.OverlayItem; import com.snackrocket.R; public class SrPlacesActivity extends MapActivity implements LocationListener { private final static ArrayList> POIS = new ArrayList>(); static { HashMap row = new HashMap(); row.put("Name", "Sushi Tei"); row.put("Description", "Sushi and Much More"); row.put("Longitude", (101.6769441 * 1E6)); row.put("Latitude", (3.1184736 * 1E6)); POIS.add(row); row = new HashMap(); row.put("Name", "Devi's Corner"); row.put("Description", "Quality Mamak"); row.put("Longitude", (101.6716426 * 1E6)); row.put("Latitude", (3.1313672 * 1E6)); POIS.add(row); row = new HashMap(); row.put("Name", "KFC"); row.put("Description", "The Colonel's Secret Recipe"); row.put("Longitude", (101.650006 * 1E6)); row.put("Latitude", (3.117497 * 1E6)); POIS.add(row); row = new HashMap(); row.put("Name", "McDonalds"); row.put("Description", "I'm lovin it"); row.put("Longitude", (101.6723386 * 1E6)); row.put("Latitude", (3.1328851 * 1E6)); POIS.add(row); row = new HashMap(); row.put("Name", "DHaven"); row.put("Description", "Thai Food and Chicha"); row.put("Longitude", (101.6710465 * 1E6)); row.put("Latitude", (3.1315682 * 1E6)); POIS.add(row); } private MapView myMap; private MyLocationOverlay myLocOverlay; private GeoPoint homebase = new GeoPoint((int) (3.1 * 1E6), (int) (101.7 * 1E6)); private int lat; private int lng; private GeoPoint myPoint = homebase;; private Geocoder geocoder; private MapController mapController; private LocationManager locationManager; private TextView locationText; private void initMap() { myMap = (MapView) findViewById(R.id.mapview); } private void initMyLocation() { myLocOverlay = new MyLocationOverlay(this, myMap); myLocOverlay.enableMyLocation(); myMap.getOverlays().add(myLocOverlay); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.mapview); // Get location manager locationManager = (LocationManager) this .getSystemService(LOCATION_SERVICE); // Create geocoder geocoder = new Geocoder(this); GeoPoint userPosition = new GeoPoint((int) (lng * 1E6), (int) (lat * 1E6)); // Prevents NullPointerException if (userPosition != null) { userPosition = myPoint; } // Inits initMap(); initMyLocation(); // Zoom int zoomLevel = 14; myMap.setBuiltInZoomControls(true); MapController mapController = myMap.getController(); mapController.setCenter(myPoint); mapController.setZoom(zoomLevel); // Set custom overlay template List mapOverlays = myMap.getOverlays(); // Create my location overlay myLocOverlay = new MyLocationOverlay(this, myMap); myLocOverlay.enableMyLocation(); // Enable compass myLocOverlay.enableCompass(); // Add my location overlay mapOverlays.add(myLocOverlay); // Cycle through POIs and do some magic GeoPoint point; OverlayItem overlayItem; Drawable drawable = getResources().getDrawable(R.drawable.iconr); for (HashMap poi : POIS) { // Create POI overlay SrItemizedOverlay itemizedOverlay = new SrItemizedOverlay(drawable, this); point = new GeoPoint(((Double) poi.get("Latitude")).intValue(), ((Double) poi.get("Longitude")).intValue()); overlayItem = new OverlayItem(point, (String) poi.get("Name"), (String) poi.get("Description")); itemizedOverlay.addOverlay(overlayItem); // Add POI overlay mapOverlays.add(itemizedOverlay); } } @Override protected boolean isRouteDisplayed() { return false; } @Override protected void onResume() { super.onResume(); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, this); } @Override protected void onPause() { super.onPause(); locationManager.removeUpdates(this); } public void onStatusChanged(String provider, int status, Bundle extras) { // 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 onLocationChanged(Location location) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); lat = (int) (location.getLatitude()); lng = (int) (location.getLongitude()); } } 

这是我的逐项覆盖逻辑:

 package com.snackrocket.location; import java.util.ArrayList; import android.app.AlertDialog; import android.content.Context; import android.graphics.drawable.Drawable; import com.google.android.maps.ItemizedOverlay; import com.google.android.maps.OverlayItem; public class SrItemizedOverlay extends ItemizedOverlay { Context mContext; // Creates ArrayList for ItemizedOverlay private ArrayList mOverlays = new ArrayList(); public SrItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); } public SrItemizedOverlay(Drawable defaultMarker, Context context) { super(boundCenterBottom(defaultMarker)); mContext = context; } // Adds OverlayItems to the ArrayList public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } // Returns OverlayItem specified by integer @Override protected OverlayItem createItem(int i) { return mOverlays.get(i); } // Returns current number of OverlayItems in the ArrayList @Override public int size() { return mOverlays.size(); } @Override protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; } } 

希望有所帮助!