使用 GoogleApiClient 的位置后台服务
Posted
技术标签:
【中文标题】使用 GoogleApiClient 的位置后台服务【英文标题】:Location background Service using GoogleApiClient 【发布时间】:2015-01-27 16:11:41 【问题描述】:我想每次都检查用户的坐标(前景和背景),如果他靠近某个地方,我会调用我的 API 并发送 GCM。
所以我在重启设备后调用了一个 BroadcastReceiver。
<receiver android:name=".LocationReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
这个接收者以这种方式调用一个服务:
public void onReceive(Context context, Intent intent)
ComponentName comp = new ComponentName(context.getPackageName(),
LocationService.class.getName());
startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
此 LocationService 正在使用 GoogleApiClient 获取位置并检查与我所在位置的距离。
public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener
@Override
public void onCreate()
super.onCreate();
mGoogleClient = new GoogleApiClient.Builder(this, this, this)
.addApi(LocationServices.API)
.build();
当我得到一个新位置时,我用这个新位置调用一个名为 LocationHandler 的 IntentService
@Override
public void onConnected(Bundle bundle)
LocationRequest locationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
.setFastestInterval(5000L)
.setInterval(10000L)
.setSmallestDisplacement(75.0F);
PendingIntent pendingIntent = PendingIntent.getService(this, 0,
new Intent(this, LocationHandler.class),
PendingIntent.FLAG_UPDATE_CURRENT);
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleClient, locationRequest, pendingIntent);
此处理程序验证距离并调用 API
public class LocationHandler extends IntentService
@Override
protected void onHandleIntent(Intent intent)
final Location location = intent.getParcelableExtra(FusedLocationProviderApi.KEY_LOCATION_CHANGED);
if (location != null) ...
我想我遗漏了一些东西,因为这个流程是在重启后触发的,但是...... 如何从我的应用的第一个活动中调用所有这些步骤?
还有什么我做错了吗?
谢谢!
【问题讨论】:
【参考方案1】:在第二个代码块的 onReceive() 方法中,您调用了 startWakefulService 来让球滚动。如果您想从活动而不是系统触发的意图中获得相同的效果,只需以指向您的 LocationService 的相同方式调用 startService()。
http://developer.android.com/reference/android/content/Context.html#startService%28android.content.Intent%29
【讨论】:
以上是关于使用 GoogleApiClient 的位置后台服务的主要内容,如果未能解决你的问题,请参考以下文章
如何将 GoogleApiClient 位置服务与 Google Api 一起使用?
Android使用GoogleApiClient获取用户位置纬度和经度[重复]
使用 Google API 进行后台位置更新 - Fused Location Provider 不准确
GoogleApiClient 中的 getLastLocation() 始终为空
GoogleApiClient onConnectionSuspended ,我应该再次调用 mGoogleApiClient.connect() 吗?