Pergunta

No Android, eu defini um exame de atividade.

Quando meu aplicativo foi lançado, uma instância dessa atividade A foi criada, digamos que é A. Quando o usuário clicou em um botão em A, outra instância de atividade B, B foi criada. Agora, a pilha de tarefas é BA, com B no topo. Em seguida, o usuário clicou em um botão em B, outra instância de ativividade C e C foi criada. Agora, a pilha de tarefas é CBA, com C na parte superior.

Agora, quando o usuário clica em um botão em C, quero que o aplicativo traga um primeiro plano, ou seja, faça um para estar na parte superior da pilha de tarefas, ACB.

Como posso escrever o código para que isso aconteça?

Foi útil?

Solução

Você pode tentar isso FLAG_ACTIVITY_REORDER_TO_FRONT (O documento descreve exatamente o que você deseja)

Outras dicas

A melhor maneira de fazer isso foi usar a mesma intenção que a tela inicial do Android usa - o lançador de aplicativos.

Por exemplo:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

Dessa forma, qualquer atividade da minha embalagem foi usada mais recentemente pelo usuário é trazida de volta à frente novamente. Achei isso útil no uso do meu serviço PendingIntent para levar o usuário de volta ao meu aplicativo.

Aqui está um exemplo de código de como você pode fazer isso:

Intent intent = getIntent(getApplicationContext(), A.class)

Isso garantirá que você tenha apenas uma instância de uma atividade na pilha.

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}

Flag_activity_reorder_to_front: Se definido em uma intenção passada para o context.StartActivity (), esse sinalizador fará com que a atividade lançada seja levada para a frente da pilha de história de sua tarefa, se já estiver em execução.

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

Eu acho que uma combinação de Intent As bandeiras devem fazer o truque. Em particular, Intent.FLAG_ACTIVITY_CLEAR_TOP e Intent.FLAG_ACTIVITY_NEW_TASK.

Adicione essas bandeiras à sua intenção antes de ligar startActvity.

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

Observe que o seu lançamento de homeatividade deve ser único

Em geral, acho que esse método de gerenciamento de atividades não é recomendado. O problema de reativar uma atividade duas etapas na pilha é que essa atividade provavelmente foi morta. Meu conselho lembre -se do estado de suas atividades e lançá -las com startActivity ()

Tenho certeza que você viu esta página, mas para Sua conveniência este link

Se você deseja trazer uma atividade para o topo da pilha ao clicar em uma notificação, pode ser necessário fazer o seguinte para fazer com que o FLAG_ACTIVIDE_REORDER_TO_FRONT funcione:

A solução para mim para isso foi fazer um receptor de transmissão que escuta as ações de transmissão que a notificação gabia. Então, basicamente:

  1. A notificação desencadeia uma ação de transmissão com um nome extra da atividade a ser lançada.

  2. O receptor de transmissão pega isso quando a notificação é clicada, depois cria uma intenção de iniciar essa atividade usando o sinalizador FLAG_ACTIVIDADE_REODERS_TO_FRONT

  3. A atividade é levada ao topo da pilha de atividades, sem duplicatas.

Se você estiver usando a "mensagem do Google Cloud" para receber notificações push com a classe "PendingIntent", o código a seguir exibe a notificação apenas na barra de ação.

Ao clicar na notificação, nenhuma atividade será criada, a última atividade ativa é restaurada retenção do estado atual sem problemas.

Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);

mBuilder.setContentIntent(contentIntent);

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

Tchau!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top