3

我正在我的应用程序中实施 GCM(谷歌云消息传递)。

我像在 Google 教程中一样设置它,并且到目前为止它工作正常。

onMessageGCMIntentService被调用时,我会在通知栏中显示通知。

现在我有一个方法可以告诉我应用程序是否在前台。当应用程序处于后台时,它会毫无问题地在栏中显示通知。

但是我怎么能向用户显示一个对话框呢?

当我打电话时:

AlertDialog.Builder builder = new AlertDialog.Builder(context);

其中 context 是来自 的给定上下文onMessage(),我当然会出现这个错误:

_Notification.showPopUp() 错误:android.view.WindowManager$BadTokenException:无法添加窗口 -- 令牌 null 不适用于应用程序

所以我尝试用 替换上下文MainActivity.this,为此我将它保存在一个静态变量中;但是当我现在运行它时,什么也没有发生,没有错误,没有对话框出现。

我的对话框代码:

private static AlertDialog.Builder myAlertDialog;

private static void showPopUp(Context context,String kind, String resource_name, Integer resource_id)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure you want to exit?")
        .setCancelable(false)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
        {
        public void onClick(DialogInterface dialog, int id) 
            {
            }
        })
        .setNegativeButton("No", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                dialog.cancel();
            }
        });

    AlertDialog alert = builder.create();
alert.show();

Log.e("TEST","alert.show()");
}

最后一个日志:alert.show() 显示在 logcat 中,但没有错误。

规格:在设备上运行 (Galaxy S2) Android 4.0.3

有人可以告诉我我的代码有什么问题吗,或者有人知道一些解决方法吗?

编辑:

我保存的部分MainActivity.this

private static Context context_forshowingPopUp = null;

创建

//Set the context for showing a popup View
_Notification.setContext_forshowingPopUp(this);

AlertDialog.Builder builder = new AlertDialog.Builder(getContext_forshowingPopUp());

public static Context getContext_forshowingPopUp() 
{
    return context_forshowingPopUp;
}

public static void setContext_forshowingPopUp(Context context_forshowingPopUp) 
{
    _Notification.context_forshowingPopUp = context_forshowingPopUp;
}
4

1 回答 1

0

在构建 Alertdialog 时,您必须使用 YourCurrentActivity.this 作为上下文。你可以像下面这样解决。

头等舱:

  public class Config{
     public static Context context;

    }

当您的活动创建时,只需设置 Config.contex

   public class MyActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
      Config.context=this;
    ...}
    //other stuffs

      }

在 OnMessage 中

   showPopUp(Config.context,kind, resource_name, resource_id);
于 2012-09-19T14:20:22.697 回答