我有一些Android代码,需要从GPS,网络或任何可用的地方快速获得最佳可用位置.准确性不如速度重要.
获得最佳可用位置肯定是一项非常标准的任务.然而,我找不到任何代码来证明它.Android位置代码要求您指定条件,注册更新和等待 - 如果您有详细的标准并且不介意等待,这很好.
但我的应用程序需要更多地工作,就像地图应用程序第一次找到你时 - 从任何可用的提供程序工作,只需检查位置是不是过时或过时.
我试图推出自己的代码来做到这一点,但我遇到了问题.(它在IntentService内部发生上传,如果这有任何区别.我已经包含了所有信息代码.)这段代码出了什么问题?
@Override
protected void onHandleIntent(Intent arg0) {
testProviders();
doUpload();
}
private boolean doUpload() {
int j = 0;
// check if we have accurate location data yet - wait up to 30 seconds
while (j < 30) {
if ((latString == "") || (lonString == "")) {
Log.d(LOG_TAG, "latlng null");
Thread.sleep(1000);
j++;
} else {
Log.d(LOG_TAG, "found lat " + latString + " and lon " + lonString);
break;
}
//do the upload …Run Code Online (Sandbox Code Playgroud) 我正在使用Google API和MapActivity,MapView等.
当我需要获取当前位置时,我会在第一时间使用此代码:
myLocationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
// Sets the criteria for a fine and low power provider
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
crit.setPowerRequirement(Criteria.POWER_LOW);
// Gets the best matched provider, and only if it's on
String provider = myLocationManager.getBestProvider(crit, true);
// If there are no location providers available
if (provider == null){
OnClickListener listener = new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Closes the activity
finish();
}
};
Utils.getInstance().showAlertDialog(this, R.string.warning_dialog_title,
R.string.no_location_providers_error_message,
android.R.drawable.ic_dialog_alert, false, listener);
}
// Location …Run Code Online (Sandbox Code Playgroud) 是否可以通过Android中的用户电话号码找到用户?如果可以将SMS发送给用户,那么我们还可以检索或了解我们发送SMS的用户的位置.
我的意思是可以编程以下功能:
还可以通过除SMS,EMAIL或CALL之外的任何其他方式通过用户的电话号码检索用户所需的位置吗?
Viber和VChat应用程序如何通过电话号码查找用户位置?
以下是应用商店中的一些应用:
寻求可靠的答案.
我的应用程序在特定时间检查用户是否在指定位置.我使用警报管理器启动进行此调用的服务:
locationManager.requestLocationUpdates(bestProvider, 0, 0, listener);
Run Code Online (Sandbox Code Playgroud)
还检查:
locationManager.getLastKnownLocation(bestProvider);
Run Code Online (Sandbox Code Playgroud)
但是我在真实设备上运行时遇到了问题.一方面,getLastKnownLocation最有可能是最后的地方的GPS是上,这可以在任何地方(即,它可以从用户的当前位置英里).所以我只是等待requestLocationUpdates回调,如果他们在两分钟内没有回复,请删除听众并放弃,对吧?
错了,因为如果用户的位置已经是稳定的(即,他们使用GPS最近并没有移动),然后我的听众将永远不会被调用,因为位置不会改变.但GPS将一直运行,直到我的听众被移除,耗尽电池......
获取当前位置的正确方法是什么,而不会误认为当前位置的旧位置?我不介意等几分钟.
编辑:有可能我错误的听众没有被调用,它可能只需要比我想象的更长一点...很难说.我还是很欣赏一个明确的答案.
我注意到像GPS Status这样的应用程序可以很快得到修复.当我尝试在自己的应用程序中修复它需要更多时间.有人知道为什么会这样吗?他们是否使用API的隐藏部分来强制GPS更快地连接?
这是我使用的
LocationManager loc = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
loc.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
listener);
Run Code Online (Sandbox Code Playgroud)
我希望GPS尽可能频繁地给出结果,因为我需要它用于AR应用程序:)虽然我为更新频率设置了1000毫秒和1米的设置,但修复速度没有可察觉的差异.
我想在谷歌地图中显示我当前的位置.它应该是动态的,即长时间和纬度应该动态设置.
就像现在我在新德里,如果我开始我的Android应用程序,我现在的位置应该在新德里显示,如果我去其他城市,它应该改变.
在以下场景中获取android当前位置的最佳方法是什么,
如果GPS不可用,请从网络提供商处获取位置
如果GPS可用并且可以获得当前位置,请从GPS提供商处获取位置
如果GPS可用但无法获得当前位置(即连续搜索位置),请从网络提供商处获取位置.
现在如果gps不可用,我可以从网络获取位置,我们非常感谢满足上述情况的最佳答案.提前致谢.
Google FusedLocationProviderApifor Android最近在过去几个月内被弃用,FusedLocationProviderClient作为其继任者,因此我最近更新了客户端应用中使用的位置API以使用新的API.
每次onLocationAvailability被触发时LocationCallback我都会在locationAvailability.isLocationAvailable()返回时通知用户false,但看起来这种情况比我在某些设备上预期的更频繁.我在前台内运行这些位置更新Service,这些位置更新保持一致至关重要.有没有办法确定这种失败的原因
在我看来,被弃用的API提供了对这些问题的更多洞察,因为它与它一起使用GoogleApiClient或者我可能缺少一些较小的细节.
我目前正在创建一个位置客户端,目前我有
public void startUpdatingLocationProcess(Context context) {
parentContext = context;
if (mFusedLocationClient == null){
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(parentContext);
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(5000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ContextCompat.checkSelfPermission(parentContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
{
mFusedLocationClient.requestLocationUpdates(mLocationRequest, new LocationCallback(){
@Override
public void onLocationResult(LocationResult locationResult) {
onLocationChanged(locationResult.getLastLocation());
}
} , Looper.myLooper());
}
}
Run Code Online (Sandbox Code Playgroud)
这是在我想在整个应用程序生命周期中运行的 LocationApi 类中,这个特定的应用程序运行许多活动,所以我不想在每次销毁和创建新活动时“重新创建”请求。
允许并检查 FINE_LOCATION 的权限,logcat 中没有错误,代码在创建 mFusedLocationClient 对象时运行 requestLocationUpdates 方法,但它从不调用“onLocationResult”方法。
使用这个 api 有什么我遗漏的吗?
我想在Android应用程序中找到我当前位置的纬度和经度.当我用手机稳定时,我只需要它.
我的代码是:
LocationManager locationManager;
locationManager = (LocationManager)getSystemService
(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation
(LocationManager.GPS_PROVIDER);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,0,0,(LocationListener) this);
updateWithNewLocation(location);
}
private void updateWithNewLocation(Location location) {
TextView myLocationText = (TextView)findViewById(R.id.myLocationText);
String latLongString;
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
} else {
latLongString = "No location found";
}
myLocationText.setText("Your Current Position is:\n" +
latLongString);
}
Run Code Online (Sandbox Code Playgroud)
在模拟器上运行后,我总是找到"找不到位置".为什么会这样?