LocationManagerAndroid上的API似乎对于仅需要偶尔粗略估计用户位置的应用程序来说有点痛苦.
我正在处理的应用程序本身并不是一个位置应用程序,但它确实需要获取用户的位置才能显示附近的商家列表.它不需要担心用户是否在移动或类似的东西.
这是我想做的事情:
ActivityX中需要它时,它将可用.看起来它应该不那么难,但在我看来,我必须启动两个不同的位置提供商(GPS和NETWORK)并管理每个生命周期.不仅如此,我还必须在多个活动中复制相同的代码以满足#2.我曾尝试过使用getBestProvider()过去将解决方案缩减为只使用一个位置提供商,但这似乎只能为您提供最好的"理论"提供商,而不是实际上会给您带来最佳结果的提供商.
有没有更简单的方法来实现这一目标?
我需要以编程方式使用GPS获取当前位置.我怎样才能实现它?
我想在Android模拟器中获得经度和纬度以进行测试.
任何人都可以指导我如何实现这一目标吗?
如何将仿真器的位置设置为测试位置?
如何计算两个GPS坐标之间的距离(使用纬度和经度)?
尽快将用户的当前位置置于阈值内,同时节省电池电量.
首先,android有两个提供商; 网络和GPS.有时网络更好,有时GPS更好.
"更好"是指速度与准确度之比.
如果我几乎可以立即获得位置并且不打开GPS,我愿意牺牲几米精度.
其次,如果您要求更新位置更改,则在当前位置稳定时不会发送任何内容.
谷歌有一个确定"最佳"位置的例子:http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate
但我认为它不是应该尽可能好的地方/可能.
我有点困惑为什么谷歌没有标准化的位置API,开发者不应该关心位置来自哪里,你应该只指定你想要的东西,手机应该为你选择.
我需要找到一个很好的方法来确定"最佳"位置,也许是一些启发式或者可能通过某些第三方库.
这并不意味着确定最好的提供商!
我可能会使用所有提供商并选择其中最好的.
该应用程序将以固定间隔收集用户的位置(假设每10分钟左右)并将其发送到服务器.
该应用程序应尽可能节省电池,并且位置应具有X(50-100?)米的精度.
目标是以后能够在地图上绘制白天用户的路径,因此我需要足够的准确性.
您认为对于期望和接受的准确度的合理价值是什么?
我一直在使用100米接受,并且根据需要使用30米,这要问多少?
我希望以后能够在地图上绘制用户的路径.
期望100米,接受500米更好吗?
此外,现在我每次更新GPS的时间最长为60秒,如果你在室内的准确度可能超过200米,这个位置太短了吗?
这是我目前的代码,感谢任何反馈(除了缺少错误检查,这是TODO):
protected void runTask() {
final LocationManager locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
updateBestLocation(locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER));
updateBestLocation(locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER));
if (getLocationQuality(bestLocation) != LocationQuality.GOOD) {
Looper.prepare();
setLooper(Looper.myLooper());
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateBestLocation(location);
if (getLocationQuality(bestLocation) != LocationQuality.GOOD)
return;
// We're done …Run Code Online (Sandbox Code Playgroud) 所以我使用navigator.geolocation.getCurrentPosition jammy有一个相当简单的JS.
$(document).ready(function(){
$("#business-locate, #people-locate").click(function() {
navigator.geolocation.getCurrentPosition(foundLocation, noLocation);
});
navigator.geolocation.getCurrentPosition(foundLocation, noLocation);
function foundLocation(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var userLocation = lat + ', ' + lon;
$("#business-current-location, #people-current-location").remove();
$("#Near-Me")
.watermark("Current Location")
.after("<input type='hidden' name='business-current-location' id='business-current-location' value='"+userLocation+"' />");
$("#people-Near-Me")
.watermark("Current Location")
.after("<input type='hidden' name='people-current-location' id='people-current-location' value='"+userLocation+"' />");
}
function noLocation() {
$("#Near-Me").watermark("Could not find location");
$("#people-Near-Me").watermark("Could not find location");
}
})//end DocReady
Run Code Online (Sandbox Code Playgroud)
基本上这里发生的是我们得到当前位置,如果得到的话,两个"水印"被放置在两个字段中,表示"当前位置",两个隐藏字段用lat-long数据作为它们的值(它们被删除)在一开始所以他们不会每次都重复).还有两个按钮,它们具有与之相关的点击功能,可以执行相同的操作.不幸的是,每三次左右,它都有效.这有什么问题???
我想通过他们的知识产权来访问国家...现在我正在使用这个(http://api.hostip.info/country.php?ip= ......)
这是我的代码:
<?php
if (isset($_SERVER['HTTP_CLIENT_IP']))
{
$real_ip_adress = $_SERVER['HTTP_CLIENT_IP'];
}
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$real_ip_adress = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$real_ip_adress = $_SERVER['REMOTE_ADDR'];
}
$cip = $real_ip_adress;
$iptolocation = 'http://api.hostip.info/country.php?ip=' . $cip;
$creatorlocation = file_get_contents($iptolocation);
?>
Run Code Online (Sandbox Code Playgroud)
嗯,它工作正常,但问题是,这会返回像美国或CA这样的国家/地区代码,而不是像美国或加拿大这样的整个国家/地区名称.
那么,hostip.info提供这个有什么好的替代方案吗?
我知道我可以编写一些代码,最终将这两个字母转换为整个国家/地区名称,但我只是懒得写一个包含所有国家/地区的代码......
PS:出于某种原因,我不想使用任何现成的CSV文件或任何能为我获取此信息的代码,例如ip2country现成代码和CSV.
我想从他们的IP地址检索访问者的城市,州和国家等信息,以便我可以根据他们的位置自定义我的网页.有没有一种好的,可靠的方法在PHP中执行此操作?我使用JavaScript进行客户端脚本编写,使用PHP进行服务器端脚本编写,使用MySQL进行数据库访问.
如何使用位置工具获取Android中移动设备的当前纬度和经度?