#android
#Android
Вопрос:
По разным причинам мое приложение создает записи в панели уведомлений. Когда пользователь нажимает на уведомление, я хочу отобразить пользовательское действие, которое представляет запись в определенном формате.
Intent intent = new Intent(applicationContext, TextMessageViewerActivity.class);
intent.putExtra("text_message", someText);
PendingIntent contentIntent = PendingIntent.getActivity(applicationContext, 0, intent, 0);
// now create a notification and post it. no fancy flags
Все сводится к отправке строки с помощью дополнительного Intent и отображению ее в моей Activity. Что происходит, так это то, что первое намерение, которое доставляется в мою Activity, каким-то образом «застревает», и все дальнейшие намерения, доставленные ему, отображают только первое дополнительное намерение.
public class TextMessageViewerActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.text_viewer);
}
@Override
public void onResume()
{
super.onResume();
Intent startingIntent = getIntent();
String message = startingIntent.getStringExtra("text_message");
String displayMessage = message != null ? message : "No message found";
((TextView)findViewById(R.id.text_viewer_text_id)).setText(displayMessage);
}
}
Чего я не понимаю в жизненном цикле активности Android?
Ответ №1:
Сегодня я узнал кое-что новое: PendingIntent.getActivity
может возвращать то же самое PendingIntent
для данного Activity
. Чтобы создать уникальный PendingIntent
для каждой уникальной Intent
отправки, вы должны указать PendingIntent.FLAG_ONE_SHOT
флаг при его создании.
Так, например, строка создания PendingIntent в моем коде выше должна была быть:
PendingIntent contentIntent = PendingIntent.getActivity(applicationContext, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Ответ №2:
Я думаю, вам нужно использовать onNewIntent()
функцию. Это изменяет намерение, которое видит ваша Activity. Использование:
/**
* onResume is called immediately after this.
*/
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
resolveIntent(intent);
}
Здесь resolveIntent
используется для фактической обработки нового входящего намерения. Посмотрите документацию здесь.
Комментарии:
1. На самом деле это то, о чем я подумал сначала, но onNewIntent не вызывается, если вы не укажете «singleTop» для своей activity. Тем не менее, это интуитивный ответ.