如何使用NETWORK_PROVIDER获取经度和纬度?

时间:2013-07-13 14:28:12

标签: android

当使用GPS_PROVIDER时,应用程序工作正常,但是当使用NETWORK_PROVIDER时,应用程序被强制停止。为什么?我的权限不完整?请帮助我使我的代码工作,thanx

 public class My_location extends Activity implements LocationListener {
EditText ET1,ET2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_location);

//  Log.i("onCreate_My_location", "begin");
    ET1=(EditText)this.findViewById(R.id.editText1);

    ET2=(EditText)this.findViewById(R.id.editText2);
    ET1.setText("1.0000");
    ET2.setText("1.0000");

LocationManager LM1 =(LocationManager)getSystemService(Context.LOCATION_SERVICE);

LM1.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,1,这一点);

    //Log.i("onCreate_my_location", "End");
}


@Override
public void onLocationChanged(Location L1) {
    // TODO Auto-generated method stub
    //Log.i("onLocationChanged",String.valueOf(L1.getLongitude()));
    //Log.i("onLocationChanged",String.valueOf(L1.getLatitude()));
    //Log.i("onLocationChanged",String.valueOf(L1.getAltitude()));
    ET1.setText("C.0000");
    ET2.setText("C.0000");
    ET1.setText(String.valueOf(L1.getLongitude()));
    ET2.setText(String.valueOf(L1.getLatitude()));

}

@Override
public void onProviderDisabled(String arg0) {
}

@Override
public void onProviderEnabled(String arg0) {
}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
}
  }    

2 个答案:

答案 0 :(得分:0)

而不是使用特定提供商使用最佳提供商,这将为您提供更准确的位置

使用下面给出的代码,通过自动选择最佳提供商来为您提供位置:

LocationManager LM1=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider=LM1.getBestProvider(criteria, true);
LM1.requestLocationUpdates(provider,0,1,this);

修改

您的代码可以在requestLocationUpdates

之前检查网络状态

我认为这可以避免崩溃:

if(LM1.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
 {
  LM1.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,1,this);
 }

答案 1 :(得分:0)

检查网络位置提供程序是否已启用。

try {
    network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {
   ex.printStackTrace();
}

如果启用了提供程序,则只能使用该提供程序。此外,对于使用网络提供商的位置更新,我认为将minDistance值设为1是没有意义的,因为粗略位置无论如何都不是很准确。您可能希望将该值更改为50或100米。