1

Я пробовал несколько часов, чтобы выполнить, казалось бы, простую задачу без успеха в Android. У меня есть приложение, в котором пользователи могут зарабатывать достижения. Вычислены серверы и отправлены через push в мое приложение для Android. Когда я получаю push-уведомление, я хотел бы сделать одну из двух вещей: (1) Если мое приложение запущено, я хочу показать всплывающее окно с информацией о достижении (у меня есть макет для этого в xml). (2) Если мое приложение не работает, отправьте уведомление в панель уведомлений.Показывать всплывающее окно из push-уведомления, когда приложение запущено

Первый вопрос: Я не могу (1) независимо от того, насколько сильно я стараюсь. Я попытался начать новую деятельность с GCM IntentService OnHandleIntent так:

int achID = jo.getInt("AchievementID"); 
Intent newAchievementIntent = new Intent(getBaseContext(), NewAchievementActivity.class); 
newAchievementIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
newAchievementIntent.putExtra("AchievementID", achID); 
getApplication().startActivity(newAchievementIntent); 

Это просто ничего не делает. Затем я попытался сделать все мои действия наследуют от специального IsRunningActivity, которая имеет вещательный приемник, который затем начинает новую деятельность как таковые:

public class IsRunningBaseActivity extends Activity 
{ 
    public static boolean isRunning = false; 
    public static IsRunningBaseActivity currentActivity = null; 

    @Override 
    protected void onResume() 
    { 
     // TODO Auto-generated method stub 
     super.onResume(); 

     currentActivity = this; 

     isRunning = true; 

     LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() 
     { 

      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       int achId = intent.getExtras().getInt("AchievementID"); 
       Intent newAchievementIntent = new Intent(IsRunningBaseActivity.this, NewAchievementActivity.class); 
       newAchievementIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       newAchievementIntent.putExtra("AchievementID", achId); 
       IsRunningBaseActivity.this.startActivity(newAchievementIntent); 
      } 
     }, new IntentFilter(CLServices.NOTIFICATION_NEW_ACHIEVEMENT)); 
    } 

    @Override 
    protected void onPause() 
    { 
     super.onPause(); 

     isRunning = false; 
    }; 
} 

Так что теперь IntentService транслирует намерение, которое затем подхватывается который затем попытался запустить NewAchievementActivity. Еще не повезло. Активность не начинается.

Что я здесь делаю неправильно? Каков наилучший способ выполнить то, что я хочу здесь?

Второй вопрос: Когда я показываю уведомление от push, потому что приложение не работает, я хочу, чтобы пользователь мог нажать уведомление, чтобы открыть мое приложение и показать ту же функцию NewAchievementActivity. Проблема в том, что активность зависит от контекста приложения (пользователь должен быть зарегистрирован и иметь LoginToken, чтобы я мог получить данные о его достижении, чтобы показать). Итак, как мне открыть эту активность, продолжая проходить обычный поток моего приложения? (LoginActivity, HomeActivity, NewAchievementActivity)? Возможно ли это?

Большое спасибо за помощь.

+1

попробуйте следующее: http://commonsware.com/blog/2010/08/11/activity-notification-ordered-broadcast.html –

ответ

0

Я понял, в чем проблема. Я просто не вызывал «setContentView» в той активности, которую я пытался открыть. Я знал, что это должна быть какая-то глупая ошибка.

0

Следующий код должен ответить на ваш первый вопрос. Он работал для меня, используя GCM для обновления моего списка, когда он входит. Вопрос можно найти Refreshing activity on receiving gcm push notification Ссылка будет объясняться далее. Надеюсь, поможет.

@Override 
public void onResume() { 
super.onResume(); 
context .registerReceiver(mMessageReceiver, new IntentFilter("unique_name")); 
} 

//Must unregister onPause() 


@Override 

protected void onPause() { 

super.onPause(); 

context.unregisterReceiver(mMessageReceiver); 
} 


//This is the handler that will manager to process the broadcast intent 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
@Override 

public void onReceive(Context context, Intent intent) { 

    // Extract data included in the Intent 
    String message = intent.getStringExtra("message"); 

    //do other stuff here 
} 

}; 

Второй вопрос, если я его правильно понимаю. Вы можете указать, что происходит при нажатии на уведомление. Так что просто отправьте пользователя, куда вы хотите, чтобы они пошли.

Intent intent= new Intent(context, MainActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,intent, 0); 
+0

Что касается первого вопроса, это не то, что я задал. Я хочу начать новое действие или показать всплывающее окно, когда приходит уведомление. Я уже могу обновить список, когда приходит уведомление, но «startActivity» не работает. Вопрос в том, что я знаю, как начать работу с уведомлением, но моя проблема такова: – user2527666

+0

Я хочу начать работу с NewAchievementNotification, но для этого мне нужно сначала запустить код, который находится в другом действии! – user2527666

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