Поставщик GPS включен, но getLastKnownLocation (поставщик) возвращает значение null

Я пытаюсь использовать поставщика GPS для своего приложения.

Приложение определяет текущее местоположение устройства с помощью GPS Location Provider.

Приложение работает просто отлично. Но, хотя мой GPS_Provider включен, geLastKnownLocation() возвращает null.

MainActivity.java


public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

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

        String provider = LocationManager.GPS_PROVIDER;
        Location location = locationManager.getLastKnownLocation(provider);

        Log.v("BEFORE", "Location is: " + location);
        updateWithNewLocation(location);
        Log.v("AFTER", "LOCATION FOUND");
    }

    private void updateWithNewLocation(Location location){
        String latLongString;
        TextView myLocationText;
        myLocationText = (TextView)findViewById(R.id.myLocationText);

        if (location != null) {
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            latLongString = "Lat:" + lat + "\nLong:" + lng;
        } 
        else {
            latLongString = "No location found";
        }

        myLocationText.setText("Your Current Position is:\n" + latLongString);
    }

}

Манифест.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.paad.whereami"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="4"
    android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION"
    />

</manifest>

person Tasos Moustakas    schedule 30.07.2012    source источник


Ответы (2)


В соответствии с документацией , он возвращает null, если устройство не знает о последнем известном местоположении. Вероятно, GPS не может найти вас. Во всяком случае, это занимает около минуты. Поэтому постарайтесь выйти на улицу, под ясное небо, подальше от высоких зданий, и подождите, пока GPS не найдет вас. Наверное, это помогает. И не забывайте о разрешениях. Если вы попытаетесь использовать GPS_PROVIDER, вам не потребуется ни доступ в Интернет, ни состояние сети.

РЕДАКТИРОВАТЬ:

Чтобы заставить GPS работать на эмуляторе, см. эту ссылку.

person overbet13    schedule 30.07.2012
comment
хе-хе, проблема в том, что я запускаю приложение на эмуляторе на своем ноутбуке ... так что у меня нет таких удобств :( - person Tasos Moustakas; 30.07.2012
comment
Я пробовал все вышеперечисленное, но, кажется, ничего не работает... Вы когда-нибудь сталкивались с такой же проблемой? Не могли бы вы сказать, каков был ваш вывод? - person Tasos Moustakas; 01.08.2012
comment
Что ж, я, наконец, заставил это работать :) Но сначала мне пришлось добавить кое-что для определения местоположения :) В любом случае, я рад, что это работает: D - person Tasos Moustakas; 01.08.2012
comment
хе-хе, нп.. не ожидал, что ты так сделаешь :) - person Tasos Moustakas; 01.08.2012

Для тех, кто еще пытается понять дурацкую функцию "getLastKnownLocation".

Эта функция возвращает что-то только тогда, когда GPS используется другим приложением. Таким образом, в 90% случаев он будет возвращать значение null, если вы постоянно не используете GPS для других приложений. Я тестировал это на эмуляторе и своем собственном телефоне Android. Я начинаю получать результаты при использовании приложения для определения местоположения, чтобы менять координаты каждые 5 секунд, но как только я останавливаю приложение для определения местоположения, я начинаю получать нулевой результат.

person Fahad Alkamli    schedule 22.09.2016