0

GPS とネットワーク プロバイダーの両方を試しましたが、getLastKnownLocation の場所が null になります。onLocationChanged も取得しません。電波の強いアパートから試しています。インターネットをよく閲覧したり、市場からアプリをダウンロードしてインストールしたりすることもできます。

同じトピックに関するいくつかのスレッドを読みましたが、彼らの提案は私がすでに試したようです.

これが私のコードスニペットです。

 public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    if(null == locationManager) {
        Log.d(TAG, "location manager NULL");
    }
    geocoder = new Geocoder(this); 

    // Initialize with the last known location
    Location lastLocation = locationManager
            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
    if (lastLocation != null)
        onLocationChanged(lastLocation);
    else
        Log.i(TAG, "null LastKnownLocation");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    super.onStartCommand(intent, flags, startId);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
            0,0, this);
    Log.d(TAG, "requested location updates");

    return START_STICKY;
}

ログによると:

mitenm@pinkydebian:/media/sf_E_DRIVE/tmp$ adb logcat LocationNotifierService:* *:S
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
I/LocationNotifierService(30866): null LastKnownLocation
D/LocationNotifierService(30866): gps provider enabled:true
D/LocationNotifierService(30866): network provider enabled:true
D/LocationNotifierService(30866): onCreate
D/LocationNotifierService(30866): requested location updates
D/LocationNotifierService(30866): requested location updates
D/LocationNotifierService(30866): requested location updates

「受信機のロック解除」があるため、画面のロックを解除すると、ログから期待どおりに機能する位置情報の更新を要求します。しかし、onLocationChanged メソッドは呼び出されていません。

細かいものと粗いものの両方のマニフェストに許可を追加しました。

よろしく、

みてん。

4

1 に答える 1

0

アンドロイド getLaskKnownLocation null

Googleドキュメントに従って

getLaskKnownLocation 指定されたプロバイダーから取得された最後の既知の位置修正からのデータを示す Location を返します。それ以外の場合は null を返します。

これは、キャッシュされたデータを表示することを意味します。以前に位置データを照会したことがないデバイスでアプリケーションを実行している場合、キャッシュが空になるため、null が取得されます。

onLocationChanged も取得しません。

場所のネットワーク プロバイダーが有効になっていることを確認します。

以下のスニペットを使用します。

if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected() || connectivityManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).isConnected()) {

    if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        Constants.CONNECTED = true;

        locationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 5000, 1, this);
    } else {
        Constants.CONNECTED = false;

        Toast.makeText(
        context, "Please enable Wireless networks in Location Setting!!", 10000).show();
    }

}
于 2012-06-22T10:25:13.527 に答える