Получить широту и долготу, не вставляя SIM-карту и Start / Stop Gps из приложения - PullRequest
4 голосов
/ 07 декабря 2010

Я пытаюсь получить широту и долготу GPS, но у меня появляется запрос, что всякий раз, когда я пытаюсь получить Lat & Long без сим-карты, он не предоставляет никакой информации, где, как только я вставляю свою сим-карту, он предоставляет мневся информация в желаемом порядке.

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

LocationListener mlocListener = new MyLocationListener();

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                                   0, 0, mlocListener);

вы можете видеть, хотя я использую GPS_PROVIDER, он не дает мне Lat & Long без помощи оператора сети, кто-нибудь может мне сказать?


Другое дело, как запускать и останавливать GPS из приложения означает, что я хочу запустить GPS через определенное время, а затем, как только я получу выделение, я могу его отключить.

Ответы [ 4 ]

7 голосов
/ 09 февраля 2011

Вам не нужно иметь доступ к какой-либо сети, чтобы получить местоположение GPS на Android.Но подключение к интернету ускоряет определение местоположения примерно с 5 минут до 5 секунд (приблизительно)!Это улучшение внесено Assisted-GPS (A-GPS) , в отличие от автономного GPS.

Телефоны GPS (включая устройства Android) проверяют наличие сетевого подключения.Если это так, они загружают вспомогательные данные с сервера A-GPS и используют его для вычисления местоположения с помощью набора микросхем GPS.Если нет, то чипсет GPS должен загружать данные со спутника GPS, что занимает много времени (скорость составляет 50 бит в секунду!).Процесс также может быть ускорен, если местоположение GPS было вычислено не так давно.

Итак, сначала:

  • проверьте, что вы добавили ACCESS_FINE_LOCATION в разрешения вашего манифеста
  • убедитесь, что в настройках телефона включены спутники GPS
  • убедитесь, что вы не находитесь в помещении (сигналы от спутников на высоте 20 000 км выше не любят крыши и стены)

Затем запуститеВаше приложение и подождите, может пройти несколько минут, прежде чем станет доступно первое исправление.

Что касается запуска GPS из вашего приложения, то это представляется возможным (см. Как включить или отключить GPS программнона Android? ), но я не знаю как!По крайней мере, вы можете загрузить Tasker и запрограммировать его для запуска / остановки GPS.

0 голосов
/ 23 мая 2012

Вот мое основное действие с кнопкой, и я установил на ней onClickListner, чтобы переключить мой GPS из состояния ВЫКЛ в ВКЛ, и для этого не требуется никакого разрешения. Протестировано с Android 2.2 и работает нормально для меня.

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class GPSONOFFActivity extends Activity {
/** Called when the activity is first created. */
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    b=(Button)findViewById(R.id.button1);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            toggleGPS(true);                
        }
    });
}

private void toggleGPS(boolean enable) {
    String provider = Settings.Secure.getString(getContentResolver(), 
        Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(provider.contains("gps") == enable) {
        return; // the GPS is already in the requested state
    }

    final Intent poke = new Intent();
    poke.setClassName("com.android.settings", 
        "com.android.settings.widget.SettingsAppWidgetProvider");
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
    poke.setData(Uri.parse("3"));
    this.sendBroadcast(poke);
 }
}
0 голосов
/ 22 ноября 2011

Это может быть устаревшим, но знаете ли вы, что это за ошибка?

Я получаю сообщение об ошибке "Ошибка при получении информации о местоположении ячейки".

Я нашелисходный код, приводящий к этой ошибке.

private void requestRefLocation(int flags)
{
    TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
    {
        GsmCellLocation gsm_cell = (GsmCellLocation) phone.getCellLocation();
        if ((gsm_cell != null)
                && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
                && (phone.getNetworkOperator() != null)
                && (phone.getNetworkOperator().length() > 3))
        {
            int type;
            int mcc = Integer.parseInt(phone.getNetworkOperator().substring(0, 3));
            int mnc = Integer.parseInt(phone.getNetworkOperator().substring(3));
            int networkType = phone.getNetworkType();
            if (networkType == TelephonyManager.NETWORK_TYPE_UMTS
                    || networkType == TelephonyManager.NETWORK_TYPE_HSDPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSUPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSPA)
            {
                type = AGPS_REF_LOCATION_TYPE_UMTS_CELLID;
            }
            else
            {
                type = AGPS_REF_LOCATION_TYPE_GSM_CELLID;
            }
            native_agps_set_ref_location_cellid(type, mcc, mnc, gsm_cell.getLac(), gsm_cell.getCid());
        }
        else
        {
            Log.e(TAG, "Error getting cell location info.");
        }
    } else {
        Log.e(TAG, "CDMA not supported.");
    }
}

Обратите внимание на оператор проверки

if ((gsm_cell != null)
            && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
            && (phone.getNetworkOperator() != null)
            && (phone.getNetworkOperator().length() > 3))
    {

Это как-то приводит к проблеме, с которой вы столкнулись.Конечно, подключившись к сети WIFI, вы все равно получите свое местоположение, так как оно использует другой способ его получения.Я надеюсь, что это ответит на ваш вопрос.

0 голосов
/ 08 февраля 2011

Я думаю, что одной из проблем, с которыми вы сталкиваетесь, может быть тот факт, что в Android нет встроенных «карт».Карты загружаются с серверов Google на лету, так как телефон нуждается в них.Например, зачем загружать карту всей страны, когда вам нужна только карта окрестностей?Это теория, стоящая за этим.Он захватывает ваше местоположение, отправляет его на сервер Google и выдает вам обратно карту, которая, по вашему мнению, вам нужна.Конечно, если вы загрузили все карты (которые я слышал возможно, но я не совсем уверен) на ваше устройство, то, вероятно, это не так ...

РЕДАКТИРОВАТЬ: Google не позволяет загружать свои карты.(Спасибо Остин за информацию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...