找不到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