在 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的主要内容,如果未能解决你的问题,请参考以下文章

无法从 android 上的解析推送通知接收额外数据

Android:在应用程序关闭时从后台推送动态通知

Android Pie 无法接收百度推送通知

IONIC FCM推送通知ios,无法接收

Android- App不会从解析平台接收推送通知

无法使用 Parse 在 Android 中接收推送通知