我想每次检查用户的坐标(前景和背景),如果他靠近某个地方,我会调用我的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) {...
我想我错过了一些东西,因为这个流程在重新启动后被触发但是...... 如何从我的应用程序的第一个活动中调用所有这些步骤?
还有别的我做错了吗?
谢谢!
答案 0 :(得分:0)
在第二个代码块的onReceive()方法中,您调用了startWakefulService以使滚动滚动。如果您希望从活动而不是系统触发的意图获得相同的效果,只需以指向您的LocationService的相同方式调用startService()。