Получите широту и долготу без вставки SIM-карты и запуска / остановки GPS из приложения

StackOverflow https://stackoverflow.com/questions/4375913

  •  09-10-2019
  •  | 
  •  

Вопрос

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

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 после конкретного времени, и чем как только я получаю Бески, я могу выключить его.

Это было полезно?

Решение

Вам не нужно иметь доступ к любой сети, чтобы получить местоположение 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?), но я не знаю, как! По крайней мере, вы можете скачать Проводник И программируйте его, чтобы начать / остановить GPS.

Другие советы

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

Редактировать: Google делает нет Разрешить загрузку своих карт. (Благодаря Остину для информации).

Это может быть устаревшим, но у вас есть идеи, какая ошибка?

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

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

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, вы все равно получите ваше местоположение, так как он использует другой способ получить его. Я надеюсь, что это ответит на ваш вопрос.

Вот мое основное действие с кнопкой, и я установил 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);
 }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top