Posso encontrar uma maneira de enviar parâmetros para minha atividade a partir da minha notificação.
Eu tenho um serviço que cria uma notificação. Quando o usuário clica na notificação, quero abrir minha atividade principal com alguns parâmetros especiais. Por exemplo, um ID de item, para que minha atividade possa carregar e apresentar uma exibição de detalhes de itens especiais. Mais especificamente, estou baixando um arquivo e, quando o arquivo é baixado, quero que a notificação tenha a intenção de que, quando clicada, abra minha atividade em um modo especial. Eu tentei usar putExtra
minha intenção, mas não consigo extrair, então acho que estou fazendo errado.
Código do meu serviço que cria a notificação:
// construct the Notification object.
final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());
final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, tickerText);
contentView.setProgressBar(R.id.progress,100,0, false);
notif.contentView = contentView;
Intent notificationIntent = new Intent(context, Main.class);
notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notif.contentIntent = contentIntent;
nm.notify(id, notif);
Código da minha atividade que tenta buscar o parâmetro extra da notificação:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if(extras != null){
Log.i( "dd","Extra:" + extras.getString("item_id") );
}
Os extras são sempre nulos e eu nunca coloco nada no meu log.
Btw ... onCreate
só é executado quando minha atividade é iniciada, se minha atividade já foi iniciada, também quero coletar os extras e apresentar minha atividade de acordo com o item_id que recebo.
Alguma ideia?
PendingIntent.getActivity()
com o sinalizadorPendingIntent.FLAG_UPDATE_CURRENT
, caso contrário, os mesmos extras serão reutilizados para todas as notificações.