- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在收到 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/
我的应用程序运行正常,但我遇到了以下错误: 10-04 14:04:38.182: W/MessageQueue(8625): Handler (android.media.MediaPlayer$E
我想将 GCMIntentService 放在包根目录以外的目录中。 GCM documentation指出 By default, it must be named .GCMIntent
在我的应用程序中,我使用了 GCM 服务。我想在 onMessage 函数中发出哔哔声或播放一个小的 mp3 文件。 我的 GCMIntentService 是从 GCMBaseIntentServi
我已经阅读了在这里找到的关于 WakeLock 的各种解决方案,例如在 AndroidManifest.xml 中添加 Permission 以及确保将 GCMIntentService 的 Cons
我正在尝试在我的 android 应用程序中实现 GCMIntentService。 当我尝试将注册 ID 保存在我的数据库中时,asynhttp 显示以下错误 "sending message to
我正尝试在我的 Android 应用中实现 GCM。服务器端和客户端设置似乎是正确的,因为当我从服务器端“推送”一个字符串时调用了 onMessage 方法。我可以从 Intent 中读取额外内容,但
我使用 GCM 在发布图片时收到通知,然后我下载并处理它: public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
我在拥有多个自定义类型的帐户时遇到了问题。 我用GCM (Google Cloud Messaging)从我们的应用程序服务器接收消息。现在,由于您需要自己实现 GCMIntentService ex
这个问题在这里已经有了答案: 关闭9年前。 Possible Duplicate: Android RuntimeException: Unable to instantiate the servic
所以我遇到了一些问题。我试图让我的应用程序根据通过 GCM 收到的消息执行操作。在本例中,应该使用 TextToSpeech 类来发出声音。它有点有效,但不是我第一次发送消息。我意识到这可能是因为 T
未调用 GCMIntentService 的 onRegisterd() 方法。 在日志中显示如下:onReceive:com.google.android.c2dm.intent.REGISTRAT
我正在关注来自 Android 开发人员的 GCM 演示。遇到以下情况。我在 GCMIntentService 中的 OnHandleIntent 没有被调用。有人可以帮忙吗? package com
我正在尝试在 GCM 上注册我的应用程序,但我不知道为什么我的应用程序从未注册过。 GCMRegistrar.register(this, SENDER_ID); 被调用,但我的 GCMIntentS
使用 Google 的 GCM 服务构建 Android 应用程序。 我已经在 GCMIntentService 类中实现了 onRegistered 方法。 问题是我想将主要 Activity 中的
我正在我的应用程序中实现 GCM。我已按照 developer.android.com 的 GCM 教程中给出的所有步骤进行操作 我的应用程序的构建目标指向 Goolge API 8(Android
我的应用程序过去运行得非常好。最近我更新了 eclipse(插件),现在我收到了这个错误。我没有更改我的代码,所以我知道它应该继续工作。但事实并非如此。我正在使用 google eclipse 插件,
您好,我想从 GCMIntentService 发送数据到我的主要 Activity ,我想在那里接收它?我该如何实现? 我非常坚持这一点在我的主要 Activity 中,我有一个列表,我想根据收到的
我正在尝试从 GCMBaseIntentService 运行 AsyncTask,但是当我这样做时应用程序崩溃了。令人感动的是,我想使用 MainActivity 中的上下文来让我的 AsyncTas
我想在收到 GCM 通知时获取用户在 Android 中的位置。 所以在我的 GCMIntentService extends GCMBaseIntentService 中,我这样做了: @Ov
我已经在我的 android 应用程序中成功实现了用于推送通知的 GCM 框架。但是我对 Google 在 GcmIntentService 类中覆盖的功能有点困惑。 @Override protec
我是一名优秀的程序员,十分优秀!