Я пробовал несколько часов, чтобы выполнить, казалось бы, простую задачу без успеха в 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)? Возможно ли это?
Большое спасибо за помощь.
попробуйте следующее: http://commonsware.com/blog/2010/08/11/activity-notification-ordered-broadcast.html –