Android: контекст имеет некоторые проблемы при отображении push-уведомлений с использованием C2DM - PullRequest
1 голос
/ 03 августа 2011

Я пытаюсь отобразить push-уведомления с использованием C2DM.Если это сообщение Toast, то оно показывает нормально.Но когда я пытаюсь получить уведомление о строке состояния или какой-нибудь AlertDialog, он не работает.А также я попытался начать другую деятельность по приему сообщения, тогда также это не работало.Я попытался использовать 2 типа контекста:

  1. onReceive (контекст контекст , намерение)
  2. Я создал статическую переменную для первого действия и попыталсячтобы получить контакт приложения, используя эту переменную.

Но ничего не дает желаемых результатов.

Ниже приведен код уведомления StatusBar, 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 голосов
/ 23 января 2012

С одной стороны, статическая переменная с контекстом НЕ является подходящим способом.Подсистема C2DM способна запускать процесс приложения, когда он не запущен, без запуска основной активности.Таким образом, статическая переменная не будет инициализирована.

По моему опыту, контекст, который вы получаете через onReceive(), вполне в порядке.Уведомления в строке состояния, однако, заведомо разборчивы и не выдают исключений в случае незначительных ошибок.Я предлагаю вам отладить их из упражнения (например, просто вставьте один из них в onCreate), затем переместите код в приемник C2DM.

Действительно ли изображение R.drawable.logo присутствует в проекте?Однажды у меня был разочаровывающий сеанс отладки, который был о пропущенном значке уведомления ...

...