首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将应用程序背景上的GPS位置更新到前台?

如何将应用程序背景上的GPS位置更新到前台?
EN

Stack Overflow用户
提问于 2015-02-27 06:06:55
回答 1查看 1.8K关注 0票数 0

我用的是GPS_PROVIDER或NETWORK_SERVICE_PROVIDER的纬度和经度。我想检测什么时候应用程序转到前台背景(要么通过主页按钮)。

问题:

  1. GPS检测到的位置不会不时更新,直到任何应用程序使用它,这样才能得到更新的位置。
  2. 检测应用程序的背景到前台,并在没有电池问题的情况下检测位置。
  3. 任何GPS定位更新时间,没有任何电池问题。
EN

回答 1

Stack Overflow用户

发布于 2015-02-27 06:20:38

对于背景中的get位置,经常在安卓服务类中使用FusedLocation提供程序。

熔断定位提供了更精确的定位和更少的功耗。

代码语言:javascript
运行
复制
public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener{

private static final String TAG = "LocationService";
private static final int LOCATION_INTERVAL = 1000;
private Context mContext;
private LocationRequest locationRequest;
private GoogleApiClient googleApiClient;
private FusedLocationProviderApi fusedLocationProviderApi;

@Override
public IBinder onBind(Intent arg0){
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId){
    Log.e(TAG, "onStartCommand");
    super.onStartCommand(intent, flags, startId);       
    return START_STICKY;
}

@Override
public void onCreate(){
    Log.e(TAG, "onCreate");
    mContext = this;
    getLocation();
}

@Override
public void onDestroy(){
    Log.e(TAG, "onDestroy");
    super.onDestroy();
    try{
        if(googleApiClient!=null){
            googleApiClient.disconnect();
        }
    }
    catch(Exception e){
        e.printStackTrace();
    }

} 

private void getLocation(){
    locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(LOCATION_INTERVAL);
    locationRequest.setFastestInterval(LOCATION_INTERVAL);
    fusedLocationProviderApi = LocationServices.FusedLocationApi;
    googleApiClient = new GoogleApiClient.Builder(this)
    .addApi(LocationServices.API)
    .addConnectionCallbacks(this)
    .addOnConnectionFailedListener(this)
    .build();
    if (googleApiClient != null) {
        googleApiClient.connect();
      }
  }

 @Override
public void onConnected(Bundle arg0) {
//  Location location = fusedLocationProviderApi.getLastLocation(googleApiClient);
    fusedLocationProviderApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}

@Override
public void onConnectionSuspended(int arg0) {

}

@Override
public void onResponse(int reqCode, int statusCode, String json) {

}

@Override
public void onCancel(boolean canceled) {

}

@Override
public void onProgressChange(int progress) {

}

@Override
public void onLocationChanged(Location location) {
    Toast.makeText(mContext, "Driver location :"+location.getLatitude()+" , "+location.getLongitude(), Toast.LENGTH_SHORT).show();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

@Override
public void onConnectionFailed(ConnectionResult arg0) {

}
}

从你的活动中打电话-

代码语言:javascript
运行
复制
    startService(new Intent(mContext,LocationService.class));

希望它能帮到你。

编辑

还将以下代码添加到您的清单中-

代码语言:javascript
运行
复制
    <service 
         android:name=".LocationService">
     </service>

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28758609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档