在Android系统中,获得用户lat液化天然气位置最有效的方法是什么?
所谓高效,我指的是快速且不太侵入权限(也是在最近Android6.0的权限更改之后)。
问题的第二部分是,除了Google之外,还有什么其他方法可以获得用户位置呢?
发布于 2016-02-02 08:52:17
更快的方式,使用Google Api,而不是Android Api:
首先,让类扩展GoogleApiClient.ConnectionCallbacks和LocationListener接口,并声明一个GoogleApiClient变量。
private GoogleApiClient gApiClient;
其次,从onCreate或类似的地方调用此方法:
protected synchronized void buildGoogleApiClient() {
gApiClient = new GoogleApiClient.Builder(getActivity())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
})
.addApi(LocationServices.API)
.build();
gApiClient.connect();
createLocationRequest();
}
protected void createLocationRequest() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
最后,重写此方法:
@Override
public void onLocationChanged(Location location) {
tempLatitude=location.getLatitude();
tempLongitude=location.getLongitude();
}
编辑
我刚刚意识到我缺少了一个方法,这个方法在连接fApiClient之后自动调用:
@Override
public void onConnected(Bundle bundle) {
Location lkn= LocationServices.FusedLocationApi.getLastLocation(
gApiClient);
if(lkn!=null){
tempLatitud=lkn.getLatitude();
tempLongitud=lkn.getLongitude();
}
LocationServices.FusedLocationApi.requestLocationUpdates(
gApiClient, mLocationRequest, this);
}
而且,如果您使用的是映射,则需要扩展另外两个接口: OnMapReadyCallback和GoogleMap.OnMapClickListener,这是最后一个接口,以防您需要对用户点击映射做出反应。第一种方法只需实现方法onMapReady(GoogleMap map)。在这个方法中,您可以
this.map=map;
(this.map是指类中由您声明的GoogleMap变量)。
在那之后,你的地图就可以使用了。
您将获得onLocationChanged方法中设备位置的更新,供您使用。
回答你的第二个问题,你可以得到你的纬度和经度通过三角测量的蜂窝塔。看,here
发布于 2016-02-02 08:43:47
使用LocationManager。
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
longitude = location.getLongitude();
latitude = location.getLatitude();
}
}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
如果你想使用全球定位系统,你需要给你的应用程序ACCESS_FINE_LOCATION
许可。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
希望能帮上忙。
https://stackoverflow.com/questions/35158969
复制相似问题