gps连接在一些Android手机上花时间

时间:2013-09-30 12:30:14

标签: android gps

我正在使用此代码获取当前位置的纬度和经度...但应用程序有时会崩溃。在某些手机上,获取该位置需要很长时间,而使用gps的其他应用程序在同一设备上获得更快的位置

package com.example.newproject;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager; 
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity implements LocationListener {
private TextView tv;
private static LocationManager locationMgr = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = (TextView)findViewById(R.id.textView1);
    locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
@Override
protected void onStop()
{
    super.onStop();
    try {
        locationMgr.removeUpdates(this);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    locationMgr = null;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    tv.setText(""+location.getLatitude()+","+location.getLongitude());
}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

}

3 个答案:

答案 0 :(得分:0)

首先,您必须检查位置提供程序是否已启用,例如:

boolean networkProviderEnabled=locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
boolean gpsProviderEnabled=locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);

其次,尝试使用网络提供商快速但不那么准确的位置,而不仅仅是GPS卫星。

很棒的教程here

答案 1 :(得分:0)

锁定GPS卫星需要时间。您可以在等待GPS锁定时使用getLastKnownLocation,或使用更快但不太精确的NETWORK_PROVIDER

答案 2 :(得分:0)

只是在黑暗中拍摄:API常量中定义的位置提供程序不保证可用。我遇到过像这样的代码崩溃:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

相反,请尝试使用LocationManager.getBestProvider()选择位置提供商。这将返回有效的位置提供程序,如果没有,则返回null,因此在请求位置更新之前测试null。见http://developer.android.com/reference/android/location/LocationManager.html#getBestProvider%28android.location.Criteria,%20boolean%29

如果由于某种原因您需要GPS,请尝试以下代码:

if (mLocationManager.getAllProviders().indexOf(LocationManager.GPS_PROVIDER) >= 0) {
    mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
} else {
    Log.w("MainActivity", "No GPS location provider found. Location data will not be available.");
}