0

次の Android コードから緯度と経度を取得します。

location = locationManager.getLastKnownLocation(provider);

ここで私は得てerror location is nullいます。

コードは次のとおりです。

package com.p;
import android.app.Activity;
import android.os.Bundle;
import android.os.Bundle;

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
 import android.widget.Toast;
 public class GooglemapActivity extends Activity implements LocationListener {
  private TextView latituteField;
        private TextView longitudeField; 
   private LocationManager locationManager;
    private String provider;


 /** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    latituteField = (TextView) findViewById(R.id.TextView02);
    longitudeField = (TextView) findViewById(R.id.TextView04);

    // Get the location manager
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // Define the criteria how to select the locatioin provider -> use
    // default
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    // Initialize the location fields
    if (location != null) {
        System.out.println("Provider " + provider + " has been selected.");
        int lat = (int) (location.getLatitude());
        int lng = (int) (location.getLongitude());
        latituteField.setText(String.valueOf(lat));
        longitudeField.setText(String.valueOf(lng));
    } else {
        latituteField.setText("Provider not available");
        longitudeField.setText("Provider not available");
    }
}

/* Request updates at startup */
@Override
protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(provider, 400, 1, this);
}

/* Remove the locationlistener updates when Activity is paused */
@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
}

public void onLocationChanged(Location location) {
    int lat = (int) (location.getLatitude());
    int lng = (int) (location.getLongitude());
    latituteField.setText(String.valueOf(lat));
    longitudeField.setText(String.valueOf(lng));
}

public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

public void onProviderEnabled(String provider) {
    Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_SHORT).show();

}

public void onProviderDisabled(String provider) {
    Toast.makeText(this, "Disabled provider " + provider,
            Toast.LENGTH_SHORT).show();
}
}  

次の権限を追加しました。

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

しかし、次のエラーが発生します。

プロバイダが利用できません

4

5 に答える 5

1

最後の既知の場所が null の場合、電話に最後の既知の場所がないためです。場所がキャッシュされていない場合は、ネットワークまたは GPS を介して更新された場所をリクエストする必要があります。このプロセスには時間がかかる可能性があるため、非同期で実行する必要があることに注意してください。

このドキュメントを読む必要があります:

http://developer.android.com/guide/topics/location/obtaining-user-location.html

これも読むことをお勧めします:

http://android-developers.blogspot.co.uk/2011/06/deep-dive-into-location.html

于 2012-05-02T12:03:53.237 に答える
1

有効な基準が定義されていません。それを次のように定義します

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);//true if required
    criteria.setBearingRequired(false);//true if required
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    provider = locationManager.getBestProvider(criteria, true);//search for enabled provider
于 2012-05-02T12:20:12.800 に答える
0

更新を受信するプロバイダーを指定する必要があると考えてください。

2つのオプションがあります。

  • GPS_PROVIDER
  • NETWORK_PROVIDER

あなたはおそらくこのようなものを見逃しています:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
于 2012-05-02T12:04:32.717 に答える
0
  1. [設定]->[位置情報]でGPSをオンにしましたか?
  2. なぜ使用するのですか(int) (location.getLatitude())-緯度/経度はfloat
于 2012-05-02T12:05:09.643 に答える