2012-01-07 24 views
1

无论何时监听器收到消息,我都希望将进度和警报对话框添加到活动上下文中。有了这个代码:来自c2dm侦听器事件的Tigger alertBox

public class C2DMMessageReceiver extends BroadcastReceiver { 
     @Override 
       public void onReceive(Context context, Intent intent) { 
        String action = intent.getAction(); 
        Log.w("C2DM", "Message Receiver called"); 
        if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) { 
         Log.w("C2DM", "Received message"); 
         final String payload = intent.getStringExtra("payload"); 
         Log.d("C2DM", "dmControl: payload = " + payload); 

         // Message handling 
         if(payload.equals("DataUpdate")) { 
          progressDialog = ProgressDialog.show(context, "Please wait...", "Synchronizing data ...", true); 
       syncData(context); 
       progressDialog.dismiss(); 
       AlertDialog.Builder alertbox = new AlertDialog.Builder(context); 
       alertbox.setMessage("Data was updated"); 
       alertbox.create(); 
       alertbox.show(); 
         } 
        } 
       } 
    } 

我收到以下错误,当我收到消息:

01-07 08:44:38.190: E/AndroidRuntime(750): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 

试图找出什么是最好的方式来处理,这将是,我需要缓存活动上下文在一个单身人士,然后从听众访问单身人士?或者,还有更好的方法?

感谢

回答

1

这是不可能创建/显示来自BroadcastReceiver一个Dialog。看到这个SO问题的答案android-broadcast-receiver-showing-a-dialog

还仔细考虑这样做 - 正如问题答案中提到的那样,当他们在做其他事情时,您是否真的想通过在用户面前强制弹出窗口来惹恼用户?

处理C2DM消息的首选方式通常是静默和不可见处理,或者可能只是创建用户以后可以采取行动的Notification

+0

感谢您的链接,这有助于清理事情。我要去通知 – Hoofamon 2012-01-07 19:58:04

+0

很高兴提供帮助。我非常喜欢Android中的Notification系统,它非常灵活。 – Squonk 2012-01-07 20:08:54