Не передается extras через Intent

171
09 января 2019, 10:30

Мне нужно выполнить определенные действия в активити запущенном через Intent, но по каким то причинам информация присоединенная к интенту (в которой указано, что нужно выполнить) не передается. При запуске активити getIntent() всегда равен null. Не могу разобраться почему.

Так выглядит первый активити, из которого идет запуск второго:

public class Registration extends AppCompatActivity {
    ...
    public void clickCloseButton(View view) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("startOperation", "DialogCloseRegistration");
        startActivity(intent);
    }
    ...
}

Так выглядит второй активити, в котором нужно выполнить действия после его запуска:

public class MainActivity extends BaseActivity {
    ...
    @Override
    protected void onResume() {
        super.onResume();
        // Действие при запуске активити
        String operation = getIntent().getStringExtra("startOperation");
        if (operation != null) {
            if (operation.equals("DialogCloseRegistration")) {
                DialogFragment closeRegistration = new CloseRegistration();
                closeRegistration.show(getSupportFragmentManager(), "closeRegistration");
            }
        }
    }
    ...
}

Так выглядят настройки второго запускаемого активити в манифесте:

<activity
    android:name=".activity.MainActivity"
    android:alwaysRetainTaskState="true"
    android:exported="true"
    android:label="@string/app_name"
    android:launchMode="singleInstance"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustNothing">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="site.ru"
                android:pathPrefix="/sms"
                android:scheme="http" />
    </intent-filter>
</activity>

У первого активити никаких настроек нет, кроме портретного режима.

Возможно это не важно, но MainActivity уже запускался до того как был запущен Registration.

Answer 1

Активность с режимами android:launchMode="singleInstance" и "singleTop", будучи запущенной ранее, повторно не запускается, а получает вызов onNewIntent - в этом методе Вы и получите новый интент с Вашими данными.

@Override
protected void onNewIntent(Intent intent) {
    // делаем что нужно здесь
    ...........................
    // либо меняем интент Activity, чтобы в onResume и далее
    // getIntent() возвращал уже новый
    setIntent(intent);
}
READ ALSO
Создание задач и их обработка

Создание задач и их обработка

Необходимо организовать рассылку почты следующим образомПредположительно что модуль рассылки является частью существующего приложения

179
Crash в Crashlytics

Crash в Crashlytics

Почему при старте виджета с интегрированным Firebase Crashlytics выпадает это?

215
Регулярные выражения и перевод строки в Java

Регулярные выражения и перевод строки в Java

Задача извлечь то, что находится на месте "body" между "begin" и "end" в приведенном ниже коде, но никак не могу понять как составить регулярное выражение,...

205
Что значит строка int guess = -1?

Что значит строка int guess = -1?

Вот мой код, взял с одной книги:

183