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

Java Android emulator,查找模拟用户位置坐标。有问题,java,android,android-emulator,gps,location,Java,Android,Android Emulator,Gps,Location,嘿,伙计们,当我运行程序并为模拟位置设置geo-fix的telnet命令时,我很难找到用户的经度和位置。当仿真器运行时,我只为仿真器设置模拟坐标,使其无响应,并使我的程序无法检测到输入坐标 import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.loc

嘿,伙计们,当我运行程序并为模拟位置设置geo-fix的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);
    }

}

首先。我假设您已经阅读了以下内容:

因为您提到注入模拟位置数据。您还可以尝试做一些其他事情,例如,您可以使用KML文件插入GPS位置:

但是,您应该做的主要事情是创建日志消息,以便能够更准确地检测程序失败的地方。下面是一篇关于如何设置logcat的文章:

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

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


我将更新此答案,因为如果没有堆栈跟踪或日志跟踪,就很难看到发生了什么。首先。我假设您已经阅读了以下内容:

因为您提到注入模拟位置数据。您还可以尝试做一些其他事情,例如,您可以使用KML文件插入GPS位置:

但是,您应该做的主要事情是创建日志消息,以便能够更准确地检测程序失败的地方。下面是一篇关于如何设置logcat的文章:

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

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

我将更新此答案,因为如果没有堆栈跟踪或日志跟踪,很难看到发生了什么。有几件事:

  • 您的AVDAPI级别是多少?在2.3中,像这样的崩溃是一个已知的问题

  • 如何设置模拟坐标?通过Eclipse中的emulator控件,还是通过Telnet

  • 让我们看看清单中的权限。为了使本地化正常工作,在清单标记之后需要几个权限:

    使用权限android:name=“android.permission.INTERNET” 使用权限android:name=“android.permission.ACCESS\u\u位置” 使用权限android:name=“android.permission.ACCESS\u FINE\u LOCATION” 使用权限android:name=“android.permission.ACCESS\u LOCATION\u EXTRA\u命令” 使用权限android:name=“android.permission.ACCESS\u MOCK\u位置”

  • 以下是我如何为用户位置请求更新,并将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<HashMap<String, Object>> POIS = new ArrayList<HashMap<String, Object>>();
    
        static {
            HashMap<String, Object> row = new HashMap<String, Object>();
            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<String, Object>();
            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<String, Object>();
            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<String, Object>();
            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<String, Object>();
            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<Overlay> 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<String, Object> 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;
    导入java.util.ArrayList;
    导入java.util.HashMap;
    导入java.util.List;
    导入android.graphics.drawable.drawable;
    导入android.location.Geocoder;
    导入android.location.location;
    导入android.location.LocationListener;
    导入android.location.LocationManager;
    导入android.os.Bundle;
    导入android.widget.simpledapter;
    导入android.widget.TextView;
    导入com.google.android.maps.GeoPoint;
    导入com.google.android.maps.MapActivity;
    导入com.google.android.maps.MapController;
    导入com.google.android.maps.MapView;
    导入com.google.android.maps.MyLocationOverlay;
    导入com.google.android.maps.Overlay;
    导入com.google.android.maps.OverlayItem;
    进口com.snackrocket.R;
    公共类SrPlacesActivity扩展MapActivity实现LocationListener{
    私有最终静态ArrayList POI=新ArrayList();
    静止的{
    HashMap行=新建HashMap();
    行.字(“姓名”、“寿司地”);
    row.put(“描述”、“寿司等”);
    行。put(“经度”(101.6769441*1E6));
    世界其他地区(“纬度”(3.1184736*1E6));
    POI.添加(行);
    行=新HashMap();
    行。放置(“名称”、“德维角”);
    行。put(“说明”、“质量手册”);
    行。put(“经度”(101.6716426*1E6));
    世界其他地区(“纬度”(3.1313672*1E6));
    POI.添加(行);
    行=新HashMap();
    第行。put(“名称”、“肯德基”);
    row.put(“描述”,“上校的秘方”);
    行。put(“经度”(101.650006*1E6));
    世界其他地区(“纬度”(3.117497*1E6));
    POI.添加(行);
    行=新HashMap();
    行.字(“名称”、“麦当劳”);
    row.put(“描述”,“我很喜欢它”);
    行。put(“经度”(101.6723386*1E6));
    世界其他地区(“纬度”(3.1328851*1E6));
    POI.添加(行);
    行=新HashMap();
    行。put(“名称”、“DHaven”);
    row.put(“描述”、“泰国食品和芝士”);
    行。put(“经度”(101.6710465*1E6));
    世界其他地区(“纬度”(3.1315682*1E6));
    POI.添加(行);
    }
    私有地图视图myMap;
    私人MyLocationOverlay myLocOverlay;
    专用地质点homebase=新地质点((int)(3.1*1E6),
    (国际)(101.7*1E6));
    私人内特拉特;
    私人液化天然气;
    专用地质点myPoint=homebase;;
    私人地理编码器;
    专用地图控制器;
    私人场所经理场所经理;
    私有文本视图位置文本;
    私有void initMap(){
    myMap=(MapView)findViewById(R.id.MapView);
    }
    私有void initMyLocation(){
    myLocOverlay=新的MyLocationOverlay(这是myMap);
    myLocOverlay.enableMyLocation();
    myMap.getOverlays().add(myLocOverlay);
    }
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    这个.setContentView(R.layout.mapview);
    //获取位置管理器
    地点马纳
    
    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<OverlayItem> {
        Context mContext;
    
        // Creates ArrayList for ItemizedOverlay
        private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    
    
        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;
        }
    }