找不到requestLocationUpdates的合适方法

时间:2015-03-06 03:59:31

标签: java android

这是我的MainActivity.java:

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;


public class MainActivity extends Activity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        LocationListener locationListener = new GetCurrentLocation();
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
}

这是我的GetCurrentLocation.java:

import android.app.Activity;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.google.android.gms.location.LocationListener;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

public class GetCurrentLocation extends Activity implements LocationListener {
    String longitude;
    String latitude;
    String cityName;

    public void onLocationChanged(Location loc) {
        //editLocation.setText("");
        //pb.setVisibility(View.INVISIBLE);
        Toast.makeText(
                getBaseContext(),
                "Location changed: Lat: " + loc.getLatitude() + " Lng: "
                        + loc.getLongitude(), Toast.LENGTH_SHORT).show();
        longitude = "Longitude: " + loc.getLongitude();
        //Log.v(TAG, longitude);
        latitude = "Latitude: " + loc.getLatitude();
        //Log.v(TAG, latitude);

        /*------- To get city name from coordinates -------- */
        //String cityName = null;
        Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
        List<Address> addresses;
        try {
            addresses = gcd.getFromLocation(loc.getLatitude(),
                    loc.getLongitude(), 1);
            if (addresses.size() > 0)
                System.out.println(addresses.get(0).getLocality());
            cityName = addresses.get(0).getLocality();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

        //editLocation.setText(s);
    }

    //@Override
    public void onProviderDisabled(String provider) {}

    //@Override
    public void onProviderEnabled(String provider) {}

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


}

我得到的错误是:

Error:(40, 24) error: no suitable method found for requestLocationUpdates(String,int,int,com.google.android.gms.location.LocationListener)
method LocationManager.requestLocationUpdates(long,float,Criteria,PendingIntent) is not applicable
(actual argument String cannot be converted to long by method invocation conversion)
method LocationManager.requestLocationUpdates(String,long,float,PendingIntent) is not applicable
(actual argument com.google.android.gms.location.LocationListener cannot be converted to PendingIntent by method invocation conversion)
method LocationManager.requestLocationUpdates(long,float,Criteria,android.location.LocationListener,Looper) is not applicable
(actual and formal argument lists differ in length)
method LocationManager.requestLocationUpdates(String,long,float,android.location.LocationListener,Looper) is not applicable
(actual and formal argument lists differ in length)
method LocationManager.requestLocationUpdates(String,long,float,android.location.LocationListener) is not applicable
(actual argument com.google.android.gms.location.LocationListener cannot be converted to android.location.LocationListener by method invocation conversion)

我完全空白我应该修复哪部分代码,我试图谷歌但是找不到相关的解决方案。

2 个答案:

答案 0 :(得分:7)

您使用的是错误的LocationListener课程。你需要替换它:

import com.google.android.gms.location.LocationListener;

用这个:

import android.location.LocationListener;

com.google.android.gms.location内容适用于FusedLocationProviderApi,这是Google Play服务的一部分。

标准的Android位置信息位于android.location

此外,您还有GetCurrentLocation extends Activity。但它并非Activity。您需要删除extends Activity子句。这将导致问题,因为您在该类的某些方法中调用getBaseContext()。要解决此问题,请让GetCurrentLocation的构造函数获取Context参数并将其保存在私有成员变量中。然后在需要Context而不是调用getBaseContext()时使用它。

MainActivity中,当您创建新的GetCurrentLocation时,您可以这样做:

LocationListener locationListener = new GetCurrentLocation(this);

this作为Context参数传递(Activity扩展Context)。

答案 1 :(得分:1)

错误告诉您没有接受参数requestLocationUpdates的重载方法(String,int,int,com.google.android.gms.location.LocationListener)

更接近的方法是

requestLocationUpdates(String provider, long minTime, float minDistance,
                       LocationListener listener);

修复错误的可能解决方案是:

long t = 5000;
float d = 10;
locationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, t, d, locationListener);

有关详细信息,请参阅Android LocationManager