1

嗨,我正在尝试使用设备网络或 wifi 连接在 android 中使用 Location api 获取设备位置。然而,它似乎没有得到纬度或经度。

我创建了一个位置提供者和管理器,并注册了一个位置监听器。

我然后

推出

locationManagaer.requestLocationUpdates(locationProvide.getName(),TIME_INTERVAL, DISTANCE, this);

从那时起,该应用程序根本不会检索新的位置更改。我错过了什么?

这是我的用户位置代码

public class UserLocation implements LocationListener{

    public static final int UPDATE_LATT = 0;

    private static final int TIME_INTERVAL = 1000;

    private static final int DISTANCE = 10;

    private LocationManager locationManagaer;

    private LocationProvider locationProvide;

    private Handler mHandler;

    public UserLocation(Context context, Handler handler){
        locationManagaer = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        locationProvide = locationManagaer.getProvider(LocationManager.NETWORK_PROVIDER);

        mHandler = handler;


    }

    public void startSearchLocation(){
        Log.d("", "sart location search");
        locationManagaer.requestLocationUpdates(locationProvide.getName(),TIME_INTERVAL, DISTANCE, this);
    }

    @Override
    public void onLocationChanged(Location location) {
        Log.d("", "location update on " + location.getLongitude());
        Message.obtain(mHandler,UPDATE_LATT, new Position(location.getLongitude(), location.getLatitude()));

    }

    @Override
    public void onProviderDisabled(String provider) {
        Log.d("", "onProviderDisabled");

    }

    @Override
    public void onProviderEnabled(String provider) {
        Log.d("", "onProviderEnabled");

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.d("", "onStatusChanged");

    }

}

这是我使用此类来设置和侦听新位置的活动

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            position = (Position) msg.obj;

            Toast.makeText(
                    getApplicationContext(),
                    position.getLattitude() + " " + position.getLongetude(),
                    Toast.LENGTH_LONG).show();
        }

    };

    userLocation = new UserLocation(this, mHandler);

    initializeViews();


    userLocation.startSearchLocation();
}

这是我的职位 POJO

public class Position {

    private double longetude;

    private double lattitude;

    public Position(){

    }

    public Position(double longetude, double lattitude){

    }

    public double getLongetude() {
        return longetude;
    }

    public void setLongetude(double longetude) {
        this.longetude = longetude;
    }

    public double getLattitude() {
        return lattitude;
    }

    public void setLattitude(double lattitude) {
        this.lattitude = lattitude;
    }


}

这是我的清单文件的一部分

  <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.jr.haliotest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

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

日志猫:

03-23 20:19:14.309: D/(16992): sart location search
03-23 20:19:14.384: E/(16992): file /data/data/com.nvidia.NvCPLSvc/files/driverlist.txt: not found!
03-23 20:19:14.384: I/(16992): Attempting to load EGL implementation /system/lib//egl/libEGL_tegra_impl
03-23 20:19:14.449: I/(16992): Loaded EGL implementation /system/lib//egl/libEGL_tegra_impl
03-23 20:19:14.514: I/(16992): Loading GLESv2 implementation /system/lib//egl/libGLESv2_tegra_impl

如果有帮助,请在已扎根的 htc 上进行测试。wifi 开启,上帝信号

4

2 回答 2

1

如果您在建筑物内,那么您的设备可能无法连接到 GPS 提供商。我建议你搬到一个更开放的空间,这样你就能得到信号。

一个提示,如果设备已连接以接收 gps 信号。gps 的标志将停止闪烁并变为稳定状态。

于 2013-03-23T20:57:04.803 回答
1

我将首先检查您的手机定位服务是否已启用,然后尝试重新启动。还可以尝试使用“GPS”而不是“网络”来查看问题是否与您的网络未提供位置信息有关。

根据我的经验,wifi 网络有时根本不会提供位置信息。我不确定蜂窝网络是否也是如此,但我怀疑无法保证。

于 2013-03-23T21:00:04.887 回答