当使用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) {
}
}
答案 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米。