- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 eclipse for android 中使用 loactionListener 时遇到问题。我已经用谷歌搜索了一段时间,但我似乎不明白为什么这不起作用。我唯一能想到的是,也许是因为我的测试设备没有 sim。 (通过 wifi 提供互联网)。
我用过this作为引用,但仍然没有。
谁能帮我解决这个问题。
这是我 Activity 的相关部分:
public class MainMenu extends Activity implements LocationListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu);
theMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.the_map)).getMap();
theMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
locMan = (LocationManager)getSystemService(LOCATION_SERVICE);
}
@Override
public void onLocationChanged(Location location) {
final Double lat = location.getLatitude();
final Double lng = location.getLongitude();
LatLng lastLatLng = new LatLng(lat, lng);
String title = getString(new StringLang().textSet(userLang,"marker_title"));
String snippit = getString(new StringLang().textSet(userLang,"marker_snip"));
if(userMarker!=null) userMarker.remove();
userMarker = theMap.addMarker(new MarkerOptions()
.position(lastLatLng)
.title(title)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))
.snippet(snippit));
reverseGeoCode(lat, lng);
}
}
我使用了一种不同的方法在 map 上显示我的位置,效果很好,但从未更新过。它总是显示我上次使用 GPS 的位置,结果是全国 60 英里。我可以看到这是有效的,但有没有更好的方法来做到这一点。
旧方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu);
if(findViewById(R.id.the_map) != null){
//map has loaded continue
theMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.the_map)).getMap();
theMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
android.location.Location lastLoc = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
LatLng lastLatLng ;
if(lastLoc == null){
/* Use the LocationManager class to obtain GPS locations */
double latitude = 0;
double longitude = 0;
lastLatLng = new LatLng(latitude, longitude);
lat = latitude;
lng = longitude;
String title = getString(new StringLang().textSet(userLang,"marker_title"));
String snippit = getString(new StringLang().textSet(userLang,"marker_snip"));
if(userMarker!=null) userMarker.remove();
userMarker = theMap.addMarker(new MarkerOptions()
.position(lastLatLng)
.title(title)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.your_loc_icon))
.snippet(snippit));
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(lastLatLng) // Sets the center of the map to user position
.zoom(0) // Sets the zoom
.bearing(90) // Sets the orientation of the camera to east
.tilt(20) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
currentLoc = lastLatLng;
theMap.animateCamera (CameraUpdateFactory.newCameraPosition(cameraPosition), 3000, null);
final TextView geoTagText = (TextView)findViewById(R.id.text_geoTag);
geoTagText.setText("We cannot find your current location, please check your settings.");
}else{
double latitude = lastLoc.getLatitude();
double longitude = lastLoc.getLongitude();
lastLatLng = new LatLng(latitude, longitude);
lat = latitude;
lng = longitude;
animateMap(lastLatLng);
}
}else{
theMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.the_map)).getMap();
theMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
android.location.Location lastLoc = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
LatLng lastLatLng;
double latitude = lastLoc.getLatitude();
double longitude = lastLoc.getLongitude();
lastLatLng = new LatLng(latitude, longitude);
lat = latitude;
lng = longitude;
animateMap(lastLatLng);
//no map to load
}
}
@Override
public void onLocationChanged(Location location) {
final Double lat = location.getLatitude();
final Double lng = location.getLongitude();
LatLng lastLatLng = new LatLng(lat, lng);
String title = getString(new StringLang().textSet(userLang,"marker_title"));
String snippit = getString(new StringLang().textSet(userLang,"marker_snip"));
if(userMarker!=null) userMarker.remove();
userMarker = theMap.addMarker(new MarkerOptions()
.position(lastLatLng)
.title(title)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))
.snippet(snippit));
}
如果用户需要,添加一个按钮可以手动重新定位用户,这也会很有用。
reLocBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
if(menuActive == true){
playSound();
LocationManager loc = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
android.location.Location gpsLoc = (Location) loc.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double lat = gpsLoc.getLatitude();
double lng = gpsLoc.getLongitude();
LatLng lastLatLng = new LatLng(lat, lng);
animateMap(lastLatLng);
}
}
});
我不确定为什么这两种方法都没有更新,但第二种方法在第一次加载时效果更好。
最佳答案
您似乎没有使用 requestLocationUpdates()任何地方。在该方法中,您传递一个 LocationListener
对象,然后调用该对象进行位置更新。
即在你的情况下:
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
关于android locationListener 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17818603/
我终于找到了一个获取用户 GPS 位置的应用程序,但我找到了实现 LocationListener 的应用程序。它工作正常,但我需要在不实现它的情况下执行它,因为我必须创建一个不实现方法的类。 我搜索
出现以下错误 Error:(197, 28) error: no suitable method found for requestLocationUpdates (String,long,fl
我想问一下这两个库中的 onLocaticonChange 方法。我可以从 android.location.LocationListener 捕获位置,但是当我决定使用 google.android
这是我获取经度和纬度的源代码,但是我如何在Location Listener中实现语句,我是新手,我真的需要帮助,请提供帮助,谢谢。 public class Location extends App
我正在尝试使用 LocationManager 和 LocationListener 获取用户的当前位置。但没有获得任何值(value)。 下面是我在 Java 中使用的代码: // activi
我有一个获取用户位置的应用程序。我已经在 oncreate() 中注册了 locationManager 和 listener。我已分别请求并删除了 onResume() 和 onPause()
我正在开发一个 Android 应用程序 (minSDK=8),这个应用程序有一张 map ,上面绘制了用户的当前位置。昨天,我正在修复一些路线制定的错误,一切都很好。然后,我不知道我做了什么,但设备
我已经注册了一个位置监听器,它将使用NETWORK_PROVIDER 接收位置更新。如果 activity 在前台,监听器会收到位置更新。如果我离开应用程序,一段时间后它会停止接收位置更新。这有点奇怪
我有以下代码可以从 NETWORK_PROVIDER 和 GPS_PROVIDER 请求位置更新。 locManager.requestLocationUpdates(LocationManager.
我想每 10 秒向远程服务器发送一些数据和坐标。我想,最好的匹配是 public void onCreate( Bundle savedInstanceState ) { //snip loc
我正在尝试使用 LocationListener 获取我的 GPS 速度。 我在第一次启动应用程序时请求许可,然后授予许可并且“onLocationChanged()”立即显示 toast ,但不会再
我写了这段代码,但是 MyLocationListener 类不起作用。当我像“找我”这样的短信时,代码必须给我大概的位置,但它什么也没做。这里有什么问题吗? public class SMSRece
我有以下代码使用 GPS 获取用户位置。(代码工作正常) 但我的问题是,当我关闭程序(按后退按钮)时,它会生成错误消息 应用程序......已停止工作............请重试。 . 我认为我必须
我正在尝试调试我的应用程序,但出于某种原因,当我开始获取当前位置时,我从未收到 LocationListener 的更新...我已在 list 中添加了正确的权限。这是我用来测试是否至少调用了一个回调
我正在尝试让位置更新在后台服务中运行。该服务正在运行自己的工作线程,它已经在做很多其他事情,比如套接字通信。我希望它也能处理位置更新,但这似乎只适用于一项 Activity 。据我所知,这是由于工作线
我目前正在使用计时器来确定位置监听器是否已超时?问题是 gps 仍然打开。我不知道为什么,是否有一种方法可以在 locationlistener 超时时重写或更优雅的方法? 最佳答案 考虑向您的位置管
根据sample app找到用户位置最好在 Activity 中监听位置变化: class MyActivity extends Activity implements LocationListene
我需要在我的整个应用程序中实现一个 LocationListener。 我知道我可以将服务与 LocationListener 一起使用,但问题是我必须在位置更改时使用一些通知程序。当我能够随时获得最
我在 eclipse for android 中使用 loactionListener 时遇到问题。我已经用谷歌搜索了一段时间,但我似乎不明白为什么这不起作用。我唯一能想到的是,也许是因为我的测试设备
我有一个使用 LocationListener 的服务,它将无限期地从启动运行。我的问题是,监听位置更新的频率有多高? 5分钟是电池 killer 吗? 1 呢? 最佳答案 是的,5 分钟是电池 ki
我是一名优秀的程序员,十分优秀!