2013-07-13 4 views
1

при использовании GPS_PROVIDER приложение работает нормально, но при использовании NETWORK_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) { 
} 
    }  
+0

я использовал <использование-разрешение андроида: имя = "android.permission.ACCESS_FINE_LOCATION" /> <использует-разрешение андроида: имя = "android.permission.ACCESS_COARSE_LOCATION" /> <использует-разрешение андроида: имя = "android.permission.INTERNET" /> Yousif

ответ

0

вместо того, чтобы использовать их конкретного использования поставщика лучшего поставщика, который даст вам большую точность в вашем месте

использование Приведенный ниже код, который даст Вам местоположение, автоматически выбирая лучшего поставщика:

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

Edit:

для вашего Co де вы можете проверить состояние сети перед тем requestLocationUpdates

я думаю, что это может избежать аварии:

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

thanx, но не работает – Yousif

+0

@ YousifAladdinAl-neamy см. обновленный ответ! –

+0

Спасибо Tarsem за вашу помощь, почему сбой приложения при использовании NETWORK_PROVIDER, есть ли проблема в моем коде, пожалуйста, помогите мне запустить его с помощью NETWORK_PROVIDER. Я думаю, что отсутствует конкретное разрешение. – Yousif

0

Проверьте, включен ли поставщик сетевого расположения или нет.

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

Если поставщик включен, тогда вы можете использовать его только. Кроме того, для обновления местоположения с использованием сетевого провайдера я думаю, что значение minDistance как 1 не имеет смысла, поскольку грубое местоположение в любом случае не очень точно. Возможно, вы захотите изменить это значение на 50 или 100 метров.

Смежные вопросы