gpt4 book ai didi

android - 从 GCMIntentService 获取 Android 位置

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:12 25 4
gpt4 key购买 nike

我想在收到 GCM 通知时获取用户在 Android 中的位置。
所以在我的 GCMIntentService extends GCMBaseIntentService 中,我这样做了:

   @Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message. Extras: " + intent.getExtras());
String message = getString(R.string.gcm_message);
displayMessage(context, message);
syncLocations(context);

}

在 syncLocation 中,我正在做正确的事情来获取位置

public void syncLocations(Context context)
{

locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0,
mLocationListener);
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 1000, 0,
mLocationListener);

}
public LocationListener mLocationListener = new LocationListener() {
@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 onLocationChanged(
Location location)
{
//HANDLE LOCATION
}
};

如果从应用程序内部调用 syncLocation,它会正常工作。

但是当我从通知 onMessage() 中调用它时,它进入方法,但永远不会调用 onLocationChanged。我怀疑这与上下文有关。

谁能告诉我为什么它不起作用?
谢谢

最佳答案

Can anyone please give me any info why it isn't working ?

因为 GCMIntentService 是一个 IntentService 并且在 onMessage() 之后不久就消失了(通过 stopSelf())返回。您无法可靠地执行某些操作,例如为来自 IntentService 的位置更改注册监听器。

此外,请记住,当 GCM 消息传入时,设备可能处于 sleep 状态。GCMIntentService 将使设备保持唤醒状态足够长的时间以调用 onMessage(),但是一旦 onMessage() 返回,设备就可以重新进入休眠状态。

关于android - 从 GCMIntentService 获取 Android 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15719606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com