android - 从 c2dm 监听器事件触发警报框

标签 android

我想在监听器收到消息时向任何 Activity 上下文添加进度和警报对话框。使用此代码:

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

试图弄清楚处理这个问题的最佳方法是什么,我是否需要在单例中缓存 Activity 上下文,然后从监听器访问所述单例?或者,还有更好的方法?

谢谢

最佳答案

无法从 BroadcastReceiver 创建/显示 Dialog。查看此 SO 问题的答案 android-broadcast-receiver-showing-a-dialog .

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

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

关于android - 从 c2dm 监听器事件触发警报框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8772258/

相关文章:

android - 谁能告诉我 "on O+ for instant apps"是什么意思?

android - 如何在 WorkManager for Android 中创建一个带有参数的 Worker?

java - sleep 功能不会落后于人工智能的轮次

android - WebView 进度对话框不会关闭

android - 如何在不强制输入数字的情况下默认使用 EditText 上的数字键盘?

Android - 假设 MotionEvent.ACTION_UP 将 100% 意味着用户已触摸 View 是否安全?

android - Android 内容查看器

android - 异常 : Can't start async operation (refresh inventory) because another async operation(launchPurchaseFlow) is in progress

android - 我的 setText 或我的 View 无法正常工作。?

android - 为什么华为推送应用发布后不起作用?