1

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

 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,this);

    //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) {
}
  }    
4

2 回答 2

0

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

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

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

于 2013-07-13T17:55:51.497 回答
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);
 }
于 2013-07-13T14:38:25.977 回答