我想在android上找到当前的用户位置。
我使用这些代码:
<li ng-model = "question" ng-repeat="item in questions">
{{item.info.ct}}
</li>
适用于某些网络(数据移动)。但不适用于所有位置。 (也适用于GPS)
我可以做更多的事情来更好地处理网络吗?
答案 0 :(得分:1)
Context ctx = this;
gpsLocationListener = new OLL(ctx);
networkLocationListener = new OLL(ctx);
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location temploc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (useGPS) {
if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
5000, 1, gpsLocationListener);
}
}
if (lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
5000, 1, networkLocationListener);
}
public class OLL implements LocationListener {
Context ctx;
private final static String TAG = "TAG";
public OVoidLL(Context ctx) {
this.ctx = ctx;
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, location.toString);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
答案 1 :(得分:1)
让您的活动实现LocationListener接口,然后利用FusedLocationApi来处理所有可用的提供商(例如GPS,网络)。
在onConnected方法中,您需要按以下步骤操作:
@Override
public void onConnected(Bundle connectionHint) {
LocationRequest request = new LocationRequest();
request.setInterval(10000);
request.setFastestInterval(5000);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// using fused location api, taking care of all
// available providers (e.g. GPS, NETWORK)
// here do not forget to check for available LOCATION
// permission before asking for updates
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, request, this);
}
由于您的Activity实现了LocationListener接口,因此您将收到onLocationChanged方法的更新。
@Override
public void onLocationChanged(Location location) {
// this method is defined by LocationListener interface
// here you will receive location updates based
// on fused location api
}
有关如何改进减少电池消耗的代码的详细信息,请参阅here。
我发现您在自己的活动中使用GoogleMap。也可以使用方法setOnMyLocationChangeListener直接从GoogleMap对象获取当前位置。不幸的是,此方法现已弃用,因此建议使用FusedLocationProviderApi。
答案 2 :(得分:1)
请参阅此link如何在Android应用中获取和使用位置数据