Запустите действие из BroadcastReceiver с результатом - PullRequest
1 голос
/ 22 декабря 2011

Я могу вызвать Activity из BroadcastReceiver следующим образом:

public class AlarmReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        try {
            Intent i = new Intent(context, MyActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);

            Log.v(TAG, "alarm triggered");
        } catch (Exception e) {
            Log.v(TAG, e.toString());
        }
    }
}

Это выводит приложение на передний план и вызывает onResume() в Activity.Моя проблема в том, что я не могу определить, привел ли меня BroadcastReceiver к onResume() или просто сам пользователь вручную.Можно ли быть уверенным, что BroadcastReceiver называется Activity?

Я также попытался заполнить намерение в BroadcastReceiver дополнительными функциями, выполнив i.putExtra("foo", "bar").Я не мог прочитать это, позвонив по номеру MyActivity.getIntent().getExtras().get("foo") в Activity.

Надеюсь, кто-нибудь может мне помочь с этим вопросом, большое спасибо!

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

Вы можете отправлять дополнения в своем намерении и проверять их на ReReceive, но правильным способом сделать это будет установить логическое значение для "STARTED_BY_RECEIVER";

При запуске упражнения добавьте третью строку в метод обратного вызова onReceive;

Intent i = new Intent(context, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("STARTED_BY_RECEIVER", true);
context.startActivity(i);

Затем в onCreate упражнения вы можете проверить, было ли это запущено таким вещательным приемником, как это;

if(getIntent().getExtras() != null && getIntent().getExtras().getBoolean("STARTED_BY_RECEIVER")){
    // The activity was started by the receiver
}
else{
   // The activity was started by user

Это будет работать, потому что метод getBoolean будет возвращать false, когда нет лишних, называемых «STARTED_BY_RECEIVER», таким образом, вам нужно только поставить флаг в одном месте (запущенном получателем)

Также не забудьте поместить «STARTED_BY_RECEIVER» в статическую переменную и использовать это в обоих местах!

0 голосов
/ 22 декабря 2011

Получатели широковещательной рассылки не могут передавать дополнительные данные http://developer.android.com/reference/android/content/BroadcastReceiver.html

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

boolean userStarted = getIntent().getExtras().getBoolean('userStarted', false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...