Получить информацию о погоде с API для Android - PullRequest
0 голосов
/ 02 февраля 2012

Я хочу получать информацию о погоде с помощью API погоды Google, когда у меня есть координаты долготы и широты. Поэтому я беру коды:

private void updateWeather(){
    new Thread(){
        public void run() {
            //get Weather start:
              LocationHelper helper = new LocationHelper(MomentsActivity.this);
              Location location = helper.getLocation();

              if(null != location){
                  String request = "http://www.google.com/ig/api?weather=,,,"+location.getLatitude()
                          +","+location.getLongitude();
                  XmlParserUtil parser = new XmlParserUtil(mHandler);
                  try {
                      parser.parse(HttpUtil.getWeather(request));
                  } catch (ClientProtocolException e) {
                      e.printStackTrace();
                  } catch (IOException e) {
                      e.printStackTrace();
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
            //end
        };
    }.start();
}

Но когда я хотел бы получить долготу и широту от LocationManager, я обнаружил, что местоположение все время было нулевым.

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;

public class LocationHelper {
    Context context;
    public LocationHelper(){}
    public LocationHelper(Context context){
        this.context = context;
    }
    public Location getLocation(){
        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if(null == location){
            location = manager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        }
        return location;
    }
}

Пожалуйста, помогите мне найти ошибку. Спасибо.

В дополнении: Я добавил некоторые разрешения:

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

Все таки я включил GPS и вайфай, но местоположение тоже было нулевое.

1 Ответ

0 голосов
/ 07 мая 2012
     LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                // Called when a new location is found by the network location provider.
                System.out.println("Location is: :" + location.toString());

            }

            public void onStatusChanged(String provider, int status, Bundle extras) {}

            public void onProviderEnabled(String provider) {}

            public void onProviderDisabled(String provider) {}
        };

        // Register the listener with the Location Manager to receive location updates
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
//      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locationListener);

Вы можете стать намного интереснее этого.Например, непрерывный запуск кода местоположения может привести к большой разрядке батареи.Вам также необходимо прослушать несколько ответов и отфильтровать, чтобы расставить приоритеты между точностью и недавностью.Удачи.

...