我正在将GCM(Google云消息传递)应用到我的应用程序中。
我在Google教程中进行了设置,到目前为止一直有效。
onMessage
调用GCMIntentService
时,我会在通知栏中显示通知。
现在我有一个方法告诉我应用程序是否在前台。 当应用程序处于后台时,它会在栏中显示通知,没有任何问题。
但我怎么能向用户显示一个Dialog?
我打电话的时候:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
其中context是来自onMessage()
的给定上下文,我当然是这个错误:
_Notification.showPopUp()错误:android.view.WindowManager $ BadTokenException:无法添加窗口 - token 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;
的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;
}
答案 0 :(得分:1)
在构建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);