android:context在使用C2DM显示推送通知时有一些问题

时间:2011-08-03 03:58:55

标签: android android-c2dm

我正在尝试使用C2DM显示推送通知消息。如果是Toast消息,那么它显示正常。但是,当我尝试状态栏通知或某些AlertDialog时,它无法正常工作。而且我也试图开始接收消息的另一个活动,然后它也没有工作。我尝试了两种类型的上下文:

  1. onReceive(Context context ,Intent intent)
  2. 我在第一个活动上创建了一个静态变量,并尝试使用该变量获取应用程序。
  3. 但没有任何结果能达到预期效果。

    以下是StatusBar Notification,AlertDialog的代码,以及启动另一项活动。

    AlertDialog

    //testing for dialog
    AlertDialog.Builder dialog = new AlertDialog.Builder( C2dmRegistration.obj.getBaseContext());
    dialog.setMessage("New message : "+message);
    dialog.show();
    dialog.setNeutralButton("View", new OnClickListener()       
    {
    
        @Override
        public void onClick(DialogInterface dialog, int which)
         {
    
        }
    });
    

    StatusBarNotification

    //testing for ststus bar notifications
    NotificationManager objNotfManager=(NotificationManager)  C2dmRegistration.obj.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
    int icon = R.drawable.logo;
    CharSequence tickerMessage = "Hello";
    long when= System.currentTimeMillis();
    Notification objNotf = new Notification(icon,tickerMessage,when);
    //Context context = getApplicationContext();
    CharSequence title = "Welcome";
    CharSequence mesage = "have a nice day";
    Intent NotifIntent  = new Intent(context,NotificationShow.class);
    PendingIntent contentIntent  = PendingIntent.getActivity( C2dmRegistration.obj.getApplicationContext(), 0, NotifIntent, 0);            
    objNotf.setLatestEventInfo( C2dmRegistration.obj.getApplicationContext(), title, mesage, contentIntent);
    objNotfManager.notify(1,objNotf);
    

    开始另一项活动

    //testing for new activity
    Intent startActivity = new Intent();     
    startActivity.setClass( C2dmRegistration.obj.getApplicationContext(), NotificationShow.class);       
    startActivity.setAction(NotificationShow.class.getName());       
    startActivity.setFlags(  Intent.FLAG_ACTIVITY_NEW_TASK  | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);  
    startActivity.putExtra("Title", "Hello");       
    startActivity.putExtra("Message", message);          
    context.startActivity(startActivity); 
    

    我将不胜感激任何帮助...... 谢谢......

1 个答案:

答案 0 :(得分:0)

首先,带有上下文的静态变量不是可行的方法。 C2DM子系统能够在未启动主活动的情况下启动应用程序进程。因此静态var不会被初始化。

根据我的经验,您通过onReceive()获得的上下文完全没问题。但是,状态栏通知非常挑剔,并且在出现细微错误时不会抛出异常。我建议你从活动中调试那些(例如,在onCreate中弹出一个),然后将代码移到C2DM接收器中。

图像R.drawable.logo实际上是否存在于项目中?我曾经有一个令人沮丧的调试会议,那是关于缺少通知图标......