这是我的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)
我完全空白我应该修复哪部分代码,我试图谷歌但是找不到相关的解决方案。
答案 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