Pergunta

Tenho um aplicativo de streaming de música e quero exibir uma notificação em primeiro plano quando a música estiver sendo transmitida.Estou fazendo o streaming em um serviço separado e o código que uso para a notificação em primeiro plano é o seguinte:

Notification notification = new Notification(R.drawable.ic_stat_notification, getString(R.string.app_name), System.currentTimeMillis());
Intent notificationIntent = new Intent(this, PlayerActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this,getString(R.string.app_name),
                   getString(R.string.streaming), pendingIntent);
startForeground(4711, notification);

O símbolo é mostrado na barra de tarefas, e se eu clicar na notificação o aplicativo abre, mas é uma atividade totalmente nova (acho que por causa da criação de um novo Intent).Então, se eu tiver, por exemplo.uma caixa de diálogo aberta no aplicativo não será aberta se eu encerrar o aplicativo (clicando em home) e depois deslizando/clicando no ícone do aplicativo na barra de notificação.Como posso lidar com isso para que a atividade "antiga/real" seja mostrada?

Foi útil?

Solução

Você precisa usar sinalizadores para isso.você pode ler sobre bandeiras aqui: http://developer.android.com/reference/android/content/Intent.html

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

Do link acima:

Se definido, a atividade não será iniciada se já estiver em execução no topo da pilha do histórico.

O único sinalizador superior iniciará uma nova atividade se ainda não estiver em execução; se já houver uma instância em execução, a intenção será enviada para onNewIntent().

Outras dicas

//na sua atividade

Notification notification = new Notification(R.drawable.ic_stat_notification, getString(R.string.app_name), System.currentTimeMillis());
Intent notificationIntent = new Intent(this, PlayerActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this,getString(R.string.app_name),
                   getString(R.string.streaming), pendingIntent);
startForeground(4711, notification);

//No seu manifesto

android:name="com.package.player.MusicPlayerActivity"

android:launchMode="singleTop"

Basta usar PendingIntent ao criar sua notificação:

PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(),
            0, new Intent(getActivity(), WantedActivity.class), 0);

e não se esqueça de configurá-lo no Notification Builder:

.setContentIntent(pendingIntent)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top