English 中文(简体)
安卓模拟器,查找模拟用户位置坐标。有问题
原标题:Android emulator, Finding mock user location coordinates. Having problems

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

}
最佳回答

First of all. I m assuming you have read the following: http://developer.android.com/guide/topics/location/obtaining-user-location.html

Since you mentioned injecting mock location data. There are a couple other things you could try to, for instance you could use a KML file to inject GPS locations: http://developer.android.com/guide/developing/tools/ddms.html#emulator-control

But the main thing you should do is create logging messages so that you can more accurately detect where your program is failing. Here s an article on how to setup 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" uses-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<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;

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;
    }
}

希望能有所帮助!





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签