在 android 中推送通知:无法从 GCMIntentService 调用 Toast
Posted
技术标签:
【中文标题】在 android 中推送通知:无法从 GCMIntentService 调用 Toast【英文标题】:Push notifications in android: unable to invoke Toast from GCMIntentService 【发布时间】:2012-08-21 19:48:10 【问题描述】:我正在尝试在 android 平台上使用 GCM 设置推送通知。
当我在 GCMIntentService 中执行此操作时:
@Override
protected void onMessage(Context context, Intent intent)
Toast.makeText(context,intent.getStringExtra("message"), Toast.LENGTH_LONG).show();
我收到以下错误:sending message to a Handler on a dead pool
但是当我在我的主要意图中的任何地方运行同一行时,它工作得很好。
我尝试添加在 google 上找到的添加 "Class.forName("android.os.AsyncTask");" 的修复程序到我的主要意图中的 onCreate 方法。但这无济于事。
是否可以将消息从 GCMIntentService 卸载到我的主要活动中,然后从那里简单地调用 Toast?
【问题讨论】:
【参考方案1】:你应该为此使用处理程序。代码如下:
private void handleMessage( Intent intent )
final String message = intent.getExtras().getString("message");
Thread t = new Thread()
public void run()
Message myMessage = new Message();
Bundle resBundle = new Bundle();
resBundle.putString( "message", message );
myMessage.setData( resBundle );
handler.sendMessage( myMessage );
;
t.start();
private Handler handler = new Handler()
public void handleMessage( Message msg )
Toast.makeText( getBaseContext(), msg.getData().getString( "message" ), Toast.LENGTH_LONG ).show();
;
此代码应在处理消息的 GCM 服务上实现。
【讨论】:
【参考方案2】:如何将上下文从Toast.makeText(context, ...)
更改为getApplicationContext()
?
【讨论】:
这没有帮助。不过,使用状态通知而不是 Toast 可以解决问题。 是的,但这是一种完全不同的通知方式。您只想在应用之外使用状态通知。以上是关于在 android 中推送通知:无法从 GCMIntentService 调用 Toast的主要内容,如果未能解决你的问题,请参考以下文章