我正在将 GCM(Google Cloud Messaging)集成到我的应用程序中。
我按照 Google 的教程进行了设置,并且目前它可以运行。
当 `GCMIntentService` 被调用时,我会在通知栏中显示通知。
现在我有一个方法告诉我应用程序是在前台还是后台。当应用程序在后台时,它可以在通知栏中显示通知,没有问题。
但是,我要如何向用户显示对话框?
当我调用:
最后一条日志:alert.show()在logcat中被显示,但没有错误。
规格: 运行在设备上(Galaxy S2) Android 4.0.3
请问有人能告诉我我的代码哪里出了问题,或者是否有任何解决方法?
编辑:
存储MainActivity.this的部分:
我按照 Google 的教程进行了设置,并且目前它可以运行。
当 `GCMIntentService` 被调用时,我会在通知栏中显示通知。
现在我有一个方法告诉我应用程序是在前台还是后台。当应用程序在后台时,它可以在通知栏中显示通知,没有问题。
但是,我要如何向用户显示对话框?
当我调用:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
其中,上下文是从onMessage()
中传递的给定上下文,我当然会遇到以下错误:
_Notification.showPopUp() Error: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
于是,我尝试用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;
onCreate
//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;
}