автономный GPS-координатный доступ - iPhone / Android - PullRequest
1 голос
/ 06 сентября 2011

Я работаю над небольшим приложением, и одним из наших требований является проверка физического местоположения пользователя, когда он выполнял определенную деятельность (пример: снимок должен быть сделан только возле Эйфелевой башни)

Теперь многие наши пользователи смартфонов могут иметь или не иметь доступа к данным в этот самый момент.

Можно ли получить широту и долготу пользователя, когда он не в сети (нет 3G / WiFi). ???

Я полагаю, что приложение «Карты» на iPhone использует подключение для передачи данных только для визуализации базовых карт Google, и iPhone OS по-прежнему имеет доступ к GPS-координатам устройства. Пожалуйста, дайте мне знать, если я прав или нет ..

Я хотел бы узнать то же самое о других ОС, например: Android. Любые ссылки / ссылки будут высоко ценится.

ОБНОВЛЕНИЕ: Я знаю, что GPS - это спутниковая технология, и, следовательно, я предполагаю, что она не должна иметь прямой связи с подключением к Интернету.

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Вы правы! Для получения информации о широте и долготе устройства используют оборудование GPS. Это делается без подключения к интернету . Вам нужен сигнал GPS! Однако, если вы находитесь внутри зданий, где у вас часто нет хороших сигналов GPS, iPhone пытается найти устройство с помощью окружающих сетей 3G и WIFI.

Если вы хотите отобразить эти координаты, например, на картах Google, вам необходимо подключение к Интернету, чтобы загрузить карты в соответствии с полученными вами координатами. Кроме того, для получения информации, такой как адрес, улица и т. Д., Устройства должны иметь доступ к Интернету для поиска в базах данных такого рода информации.

ПРИМЕР для iOS:

Импорт кулака #import<CoreLocation/CoreLocation.h> в ваш .h файл.

Тогда в основном вам нужен CLLocationManager.

- (IBAction)startSearchingLocation:(id)sender
{
    //locationManager is ivar of CLLocationManager
    self.locationManager = [[CLLocationManager alloc] init];
    //release it when you stop the location manager!

    // make self the delegate of the location manager
    [locationManager setDelegate:self];

    //Note that this settings will have a huge impact on battery life! 
    [locationManager setDistanceFilter:kCLDistanceFilterNone];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

    //And finally start the location manager.
    [locationManager startUpdatingLocation];
}

Менеджер местоположений начнет отправлять информацию о местоположении методу делегата называется:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

Рекомендуется отбрасывать самые первые результаты, потому что это могут быть старые кэшированные данные. Также проверьте точность, чтобы убедиться, что вы получите хорошие результаты здесь.

ЛИТЕРАТУРА:

Для получения дополнительной информации проверьте это и это документация.

Также взгляните на пример кода Apple с именем Locations.

0 голосов
/ 06 сентября 2011

тот код работает с Android

private double[] getGPS() {
        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
        List<String> providers = lm.getProviders(false);

        /* Loop over the array backwards, and if you get an accurate location, then break out the loop*/
        Location l = null;

        for (int i=providers.size()-1; i>=0; i--) {
                l = lm.getLastKnownLocation(providers.get(i));
                if (l != null) break;
        }

        double[] gps = new double[2];
        if (l != null) {
                gps[0] = l.getLatitude();
                gps[1] = l.getLongitude();
        }
        return gps;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...