3

アプリにGPSプロバイダーを使用しようとしています。

アプリは、GPSロケーションプロバイダーを使用して、デバイスの現在の位置を検索します。

アプリは問題なく動作します。しかし、私の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);
    }

}

Manifest.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>
4

2 に答える 2

13

ドキュメントに従って、デバイスが最後の既知の場所を認識していない場合はnullを返します。おそらくGPSはあなたを見つけることができません。とにかく、1分ほどかかります。ですから、外に出て、澄んだ空の下で、高い建物から離れて、GPSがあなたを見つけることができるまで待ってください。おそらくこれは役に立ちます。そして、許可を忘れないでください。を使おうとするとGPS_PROVIDER、インターネットアクセスもネットワーク状態も必要ありません。

編集:

エミュレータでGPSを機能させるには、このリンクを参照してください。

于 2012-07-30T13:23:13.717 に答える
0

まだ愚かな関数「getLastKnownLocation」を理解しようとしている人のために。

この関数は、GPSが別のアプリケーションによって使用されているときにのみ何かを返します。したがって、他のアプリで常にGPSを使用しない限り、90%の確率でnullが返されます。私はこれをエミュレーターと自分のAndroidフォンでテストしてきました。モックロケーションアプリを使用して5秒ごとに座標を変更しているときに結果を取得し始めましたが、モックロケーションアプリを停止するとすぐにnullの結果が取得され始めます。

于 2016-09-22T04:03:37.363 に答える