2012-06-12 2 views
0

Я читал много сообщений о stackoverflow об этом, но я не нашел ответа, который мне нужен. Поиск моего местоположения очень прост с использованием gps или с помощью сетевого провайдера, но есть проблема. Мое приложение сначала проверяет, активен ли gps, а если нет, я отправляю пользователя на страницу опций gps. После этого пользователь может вернуться к первому действию. Я использую текущее местоположение в этом действии и во втором действии. Я помещал слушателя только в первую активность и в функцию «onLocationUpdate()« Я сохраняю свою широту и долготу в своих глобальных переменных приложения. Если я запустил приложение, то я включил gps, а затем я открою второе действие, lat и lon равны 0.0, но если я начну действие, тогда я включил gps, а затем я жду 30 секунд, он работает. Существует ли один способ устранения этой задержки? Использование Network_Provider выполняется быстрее, но это не так точно, как gps!Android: как найти мое местоположение

Куски кода являются:

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

    boolean gpsStatus = locationManager 
      .isProviderEnabled(LocationManager.GPS_PROVIDER); 
    if (!gpsStatus) { 

     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
       this); 


     alertDialogBuilder.setTitle("The GPS is off!"); 


     alertDialogBuilder 
       .setMessage("Turn on the GPS?") 
       .setCancelable(false) 
       .setPositiveButton("Yes", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int id) { 
           Intent intent1 = new Intent(); 
           intent1.setClassName(
             "com.android.settings", 
             "com.android.settings.SecuritySettings"); 
           startActivity(intent1); 
           dialog.cancel(); 
          } 
         }) 
       .setNegativeButton("No", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, 
            int id) { 
           dialog.cancel(); 
          } 
         }); 

     // create alert dialog 
     AlertDialog alertDialog = alertDialogBuilder.create(); 

     // show it 
     alertDialog.show(); 

    } 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, locationListener); 

Эта часть предназначена для проверки, если GPS включен. Существует ли способ включения GPS без перехода на страницу настроек?

LocationListener locationListener = new LocationListener() { 

    @Override 
    public void onLocationChanged(Location location) { // update 
     if (location != null) { 

      msg_r.setLatitude(location.getLatitude()); 
      msg_r.setLongitude(location.getLongitude()); 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
}; 

Это мой слушатель.

+0

Там всегда будет задержка по времени при использовании GPS в качестве он должен сначала приобрести соединение, по крайней мере, с 4 спутниками, прежде чем он сможет указать местоположение. –

ответ

1

GPS требуется время, чтобы получить ваше текущее местоположение. Об этом нет. Вы можете использовать метод getLastKnownLocation(), если хотите, чтобы он был быстрее, или, как вы сказали, вы можете использовать сетевого провайдера. Однако последнее известное местоположение может быть не совсем точным.

GPS не готов до первого звонка onLocationUpdate(). Таким образом, вы можете заставить пользователя оставаться в первом действии до тех пор, пока это событие не произойдет, а затем разрешите пользователю перейти ко второму действию. Или у второго действия есть обновления местоположения. Есть разные вещи, которые вы могли бы сделать.

Что касается включения GPS без перехода на страницу настроек, вы не можете. Я не могу найти вопрос, но CommonsWare ответил на этот вопрос несколько часов назад, заявив, что этого не может быть, потому что это проблема конфиденциальности.

+0

Благодарим за ответ! Я попытался использовать getLastKnownLocation(), но я получил все время null. = ( – michoprogrammer

+0

Возможно, проблема в том, что в телефоне никогда не было обновления GPS, но у него никогда не было последнего известного местоположения. Вы уверены, что ваш «LocationManager» инициализирован? – Ryan

+0

Но это странно, потому что в первом Я использую карту, и я показываю myOverlay, поэтому карта знает мое местоположение и создает наложение! Также, если gps выключен, моя позиция отображается, поэтому я думаю, что местоположение уже известно!: S – michoprogrammer

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