Подтвердить что ты не робот

Как создать намерение Android, которое несет данные?

Возможно, я неправильно понял, как предполагается использовать намерения, поэтому я мог бы попросить здесь не того. Если это так, пожалуйста, помогите мне попасть на правильный путь с этим в любом случае...

Я только начал работать над Android-приложением, которое будет периодически опроса моего сервера для сообщений, и когда появится новое сообщение, я хочу показать его пользователю. Я пытаюсь реализовать это, имея Service, который опрашивает сервер, и когда новое сообщение получено, служба должна передать сообщение Activity, который показывает его.

Чтобы облегчить это сообщение, я пытаюсь создать Intent с ACTION_VIEW, но я не могу понять, как передать сообщение активности. Невозможно передать строку или обычный объект Java через намерение?

Для чего это стоит, это то, что я хотел бы сделать:

getApplication().startActivity(new Intent(MessageService.this, ViewMessageActivity.class, message));

но, конечно, это даже не компилируется.

4b9b3361

Ответ 1

Используйте пакет Intent для добавления дополнительной информации, например:

Intent i = new Intent(MessageService.this, ViewMessageActivity.class);
i.putExtra("name", "value");

И на принимающей стороне:

String extra = i.getStringExtra("name");

Или, чтобы получить все дополнительные функции в виде пакета, независимо от типа:

Bundle b = i.getExtras();

Существуют различные сигнатуры для метода putExtra() и различные методы для получения данных в зависимости от его типа. Вы можете увидеть больше здесь: Intent, putExtra.

EDIT: Чтобы передать объект, он должен реализовать Parcelable или Serializable, поэтому вы можете использовать одну из следующих подписей:

putExtra (имя строки, значение Serializable)

putExtra (имя строки, допустимое значение)

Ответ 2

Вы можете сделать следующее, чтобы добавить информацию в набор намерений:

    Intent i = new Intent(MessageService.this, ViewMessageActivity.class);
    i.putExtra("message", "value");
    startActivity(i);

Затем в действии вы можете получить следующее:

    Bundle extras = getIntent().getExtras();
    String message = extras.getString("message");

Ответ 3

Запуск активности из вашей службы каждый раз, когда будет получено новое сообщение, может быть не таким, каким вы хотите. Например, если вы просматриваете другое действие, вы будете прерваны новым сообщением.

Вы можете использовать sendBroadcast (намерение) вместе с BroadcastReceiver, чтобы уведомить о том, что новое сообщение получено.