找不到requestLocationUpdates的合适方法

这是我的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
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) 

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

您正在使用错误的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()某些方法中调用getBaseContext() 。 要解决此问题,请让GetCurrentLocation的构造函数获取Context参数并将其保存在私有成员变量中。 然后在需要Context而不是调用getBaseContext()时使用它。

MainActivity ,当您创建新的GetCurrentLocation ,您可以执行以下操作:

 LocationListener locationListener = new GetCurrentLocation(this); 

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

错误告诉您没有重载方法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