关于android:启用了GPS提供程序,但getLastKnownLocation(provider)返回null

GPS provider enabled but getLastKnownLocation(provider) returns null

我正在尝试为我的应用程序使用GPS提供程序。

该应用程序使用GPS位置提供程序查找设备的当前位置。

该应用程序工作正常。 但是,虽然我的GPS_Provider已启用,但geLastKnownLocation()返回null。

MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 +"
Long:" + lng;
        }
        else {
            latLongString ="No location found";
        }

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

}

的Manifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<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>
               

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

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

</manifest>


根据文档,如果设备不知道最后的已知位置,则返回null。可能GPS无法找到你。无论如何,大约需要一分钟。因此,在晴朗的天空下,远离高层建筑,尝试外出,等到GPS可以找到你。这可能有帮助。并且不要忘记权限。如果您尝试使用GPS_PROVIDER,则不需要Internet访问,也不需要网络状态。

编辑:

要在仿真器上运行GPS,请参阅此链接。


对于谁还在试图理解愚蠢的函数"getLastKnownLocation"。

此功能仅在GPS被其他应用程序使用时返回某些内容。
因此,除非您经常将GPS用于其他应用,否则它将在90%的时间内返回null。
我一直在模拟器和我自己的Android手机上测试它。我开始使用模拟位置应用程序来获得结果每5秒更改一次坐标但是一旦我停止模拟位置应用程序,我就开始得到空结果。