2013-12-17 3 views
0

Сейчас я создаю намерение уведомления в соответствии со следующим:GCM сообщение запускает Intent

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
Intent notificationIntent = new Intent(context, MyActivity.class); 
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
notificationIntent.setAction(Long.toString(System.currentTimeMillis())); 

notificationIntent.putExtra("key", value); 

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
Notification updateComplete = new NotificationCompat.Builder(context) 
    .setContentTitle(title) 
    .setContentText(msg) 
    .setTicker(title) 
    .setWhen(System.currentTimeMillis()) 
    .setContentIntent(contentIntent) 
    .setDefaults(Notification.DEFAULT_SOUND) 
    .setAutoCancel(true) 
    .setSmallIcon(R.drawable.icon_notifications) 
    .build(); 

notificationManager.notify(100, updateComplete); 

Когда приложение уже находится в фоновом режиме, все работает. Вызывается функция onNewIntent, и я получаю значение из дополнительных уведомлений. Однако, если приложение НЕ находится в фоновом режиме, оно переходит в корневую активность (экран входа в систему), которая переадресует пользователя на MyActivity. Но корневая активность не получает вызов onNewIntent, и к тому времени, когда пользователь доберется до MyActivity, дополнительные функции будут потеряны.

Есть ли вообще вокруг этого?

Я пытался хранить значения в другом месте безрезультатно ... Это включает в себя общие настройки.

+0

kvish Вы можете проверить, работает ли приложение или нет? Если приложение работает, то нет необходимости в дополнительном уведомлении. Прямо? – dipali

+0

Причина Мне нужно уведомление. Это связано с тем, что у меня есть некоторые данные, которые необходимо передать этому «Activity». В противном случае, как я узнаю, нажал ли пользователь push-уведомление или нет? Я хочу, чтобы иметь возможность извлекать некоторые данные из push и показывать соответствующую информацию ... есть ли более простой способ сделать это? – KVISH

ответ

0

я узнал, как это сделать.

В принципе, если активность, которую вы запускаете с notificationIntent, уже открыта (если это текущая деятельность, когда пользователь включен), она назовет onNewIntent(Intent intent). Если это не активная активность или если приложение не запущено, оно запустит действие и перейдет к onCreate().

Вы должны получить намерение от onCreate(), позвонив по телефону getIntent() и проверив его, чтобы он не был равен нулю. Дело закрыто.

0

Проверьте this вне. Я не знаю, почему ваша деятельность должна работать, чтобы получить upadate. Если вы будете следовать этому учебному курсу, то мобильный будет автоматически получать push-уведомление, если таковые имеются. Не нужно запускать активность на фоне.

+0

Не то, чтобы я не получил уведомление. В уведомлении есть некоторые данные, которые мне нужно извлечь ... Это проблема, с которой я сталкиваюсь. Вот почему мне нужна функция 'onNewIntent', называемая – KVISH

1
@Override 
    protected void onMessage(final Context ctx, Intent intent) { 
if (CommonMethod.isAppicationRunning(ctx)) { 
      // Creates an explicit intent for an Activity in your app 
      Intent resultIntent = new Intent(ctx, ViewMessageDialog.class); 
      resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      resultIntent.putExtra("gcmmessage", message); 
      ctx.startActivity(resultIntent); 
     } else { 

      try { 
       sendNotification(message); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

    } 

/////////////////////////////////////////// /////////////////////////////////

public static boolean isAppicationRunning(Context activity) { 
     ActivityManager am = (ActivityManager) activity 
       .getSystemService(EGLifeStyleApplication.mContext.ACTIVITY_SERVICE); 

     // get the info from the currently running task 
     List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
     ComponentName componentInfo = taskInfo.get(0).topActivity; 
     Log.i("current activity", "activity" 
       + activity.getClass().getSimpleName()); 

     if (componentInfo.getPackageName().equals(
       EGLifeStyleApplication.mContext.getPackageName())) { 
      return true; 
     } 
     return false; 
    } 

////////// ////////////////////////////////////////////////// ////////////////////////

private void sendNotification(String message) throws JSONException { 
     // this 
     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 

     int icon = R.drawable.app_icon; 
     CharSequence tickerText = message; // ticker-text 
     long when = System.currentTimeMillis(); 
     Context context = getApplicationContext(); 
     context.getClass().getSimpleName(); 
     Log.i("context.getClass().getSimpleName()", 
       "context.getClass().getSimpleName()=" 
         + context.getClass().getSimpleName()); 

     CharSequence contentTitle = "Product Received."; 
     CharSequence contentText = message; 
     Intent notificationIntent = null; 
     int notificationID = CommonVariable.notificationID; 

     notificationIntent = new Intent(this, ViewHomeScreen.class); 

     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
       notificationIntent, 0); 
     Notification notification = new Notification(icon, tickerText, when); 
     // Play default notification sound 
     notification.defaults |= Notification.DEFAULT_ALL; 
     notification.setLatestEventInfo(context, contentTitle, contentText, 
       contentIntent); 
     mNotificationManager.notify(notificationID, notification); 
    } 

проверки приложение работает или нет? если приложение работает в forgroung, пожалуйста, звоните только намерение пройти что конкретная активность. Если приложение работает в backgroung, тогда позвоните sendnotification(), чтобы отправить notifica на панели уведомлений.

+0

. Мой вопрос касается всего этого:' notificationIntent.putExtra («ключ», значение); ', мне нужно значение, когда приложение открывается, щелкнув на уведомлении push. Когда приложение уже открыто (или в фоновом режиме), оно работает, но когда приложение не запущено, это значение теряется ... Я вижу уведомление в панели уведомлений, я просто не вижу значения из 'extras' для намерения. – KVISH

+0

вы можете использовать широковещательный приемник, тогда ваше значение не может быть потеряно. – dipali

1

// этот код помещается в вашем gcmservice

Intent intent2 = new Intent(); 
       intent2.setAction("RECEIVE_MESSAGE_ACTION_NEW"); 
       intent2.putExtra("senderNum", senderNum); 
       intent2.putExtra("verificationCode", 
         ReturnValidationcode(message)); 
       context.sendBroadcast(intent2); 
+0

Не уверен, если я получу это ... прочитав на 'sendBroadcast', но это для уведомления. Сообщение, которое я написал выше? – KVISH

+0

http://avilyne.com/?p=267 – KVISH

+0

Это зависит от того, что вы сделали, спасибо! – KVISH

Смежные вопросы